2 | import Data.List.Elem
3 | import JS.Inheritance
10 | data Nullable : Type -> Type where [external]
12 | %foreign "javascript:lambda:()=>null"
17 | null = believe_me prim__null
20 | nonNull : a -> Nullable a
21 | nonNull = believe_me
26 | isNull = eqv prim__null
29 | maybeToNullable : Maybe a -> Nullable a
30 | maybeToNullable = maybe null nonNull
34 | {auto 0 _ : JSType a}
36 | -> {auto 0 _ : Elem b (Types a)}
38 | mayUp x = maybe null (\v => nonNull $
up v) x
41 | nullableToMaybe : Nullable a -> Maybe a
42 | nullableToMaybe v = if isNull v then Nothing else Just (believe_me v)
45 | ToFFI a b => ToFFI (Maybe a) (Nullable b) where
46 | toFFI = maybeToNullable . map toFFI
49 | FromFFI a b => FromFFI (Maybe a) (Nullable b) where
50 | fromFFI v = case nullableToMaybe v of
51 | Nothing => Just Nothing
52 | Just x => map Just $
fromFFI x
55 | SafeCast a => SafeCast (Nullable a) where
59 | else map nonNull $
safeCast ptr