type Void {} type Maybe a { Just a | Nothing } type OS { Macos | Linux | Windows | Freebsd } ; just has type a -- Maybe a ; nothing has type -- Maybe a rand : -- Int =: $cfun"rand" ; all types are sized (monomorphized) drop2 : a b -- =: [ drop drop ] drop3 : a b c -- =: [ drop drop drop ] trip : a -- a a a =: [ dup dup ] trint : -- Int Int Int =: [ 0 trip ] even : Int -- Bool =: [ 2 % 0 = ] randBool : -- Bool =: [ rand even ] maybeEven : -- (Maybe Int) =: [ rand dup even if( drop Nothing , Just ) ] push3 : -- OS OS OS =: [ Linux trip ] doNothing : Int Int -- Int Int =: [ ] %foreign cabi randBool %foreign cabi maybeEven