Amo/sample.amo

65 lines
1 KiB
Plaintext

union SimpleType
= MyVariant1
| MyVariant2 Integer[u32]
| MyVariant3 Integer[1..20]
| MyVariant4 Integer String
union Option val
= Some val
| None
struct MyStruct =
.field1 : SimpleType
.field2 : Integer
trait Eq needs
add : Self, Self -> Self
trait Functor[a, b] on Self _ needs
map : (a -> b), Self a -> Self b
pure : a -> Self a
union ComplexType[a, b : Functor]
= Left a
| Right b
impl Functor on Option _:
map mapper union = if union is
Some val -> Some (mapper val)
None -> None
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 Integer
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 -> Integer
destructure_type t =
if t is
MyVariant1 -> 0
MyVariant2 x -> x * x
MyVariant3 x -> x /2
MyVariant4 x _ -> x