Amo/sample.amo

84 lines
1.3 KiB
Plaintext
Raw Permalink Normal View History

2022-03-11 01:27:59 +00:00
// Comment!
2022-03-10 17:56:38 +00:00
type SimpleType
2022-03-10 01:16:15 +00:00
= MyVariant1
| MyVariant2 Int[u32]
| MyVariant3 Int[1..20]
| MyVariant4 Int String
2022-03-10 01:16:15 +00:00
2022-03-11 01:27:59 +00:00
/* Multiline
Comment! */
2022-03-10 17:56:38 +00:00
type Option val
2022-03-10 01:16:15 +00:00
= Some val
| None
struct MyStruct =
.field1 : SimpleType
.field2 : Int
2022-03-10 01:16:15 +00:00
trait Eq needs
.add : Self, Self -> Self
2022-03-10 01:16:15 +00:00
trait Functor[a, b] on Self _ needs
.map : (a -> b), Self a -> Self b
.pure : a -> Self a
2022-03-10 01:16:15 +00:00
2022-04-06 13:23:46 +00:00
type ComplexType a b[Functor]
2022-03-10 01:16:15 +00:00
= Left a
2022-04-06 13:23:46 +00:00
Right b
2022-03-10 01:16:15 +00:00
impl Functor on Option _:
.map mapper union = if union is
2022-03-10 01:16:15 +00:00
Some val -> Some (mapper val)
None -> None
.pure elem = Some elem
2022-03-10 01:16:15 +00:00
magnitude : Int, Int -> Int
magnitude x y = sqrt (x * x) (y * y)
soundeffect : Bool -> Str
soundeffect type =
if type then
"bip!"
else
"bop!"
destructure : MyStruct -> Option Int
2022-03-10 01:16:15 +00:00
destructure s =
if s is
MyStruct
.field1 = MyVariant2 a
.field2 = 0
-> Some (magnitude a 10)
MyStruct
.field1 = MyVariant1
.field2
->
if a > 10
Some a
else
None
_ -> None
destructure_type : SimpleType -> Int
2022-03-10 01:16:15 +00:00
destructure_type t =
if t is
MyVariant1 -> 0
MyVariant2 x -> x * x
MyVariant3 x -> x /2
MyVariant4 x _ -> x
simple_tuple : (Int, Int)
simple_tuple = (1, 2)
magnitude_plus_ten : Int, Int -> Int
magnitude_plus_ten x y =
let magnitude =
let x_squared = x * x
let y_squared = y * y
in sqrt (x + y)
in
let magnitude_plus_5 = magnitude + 5
in magnitude_plus_5 + 5