@@ -17,12 +17,13 @@ check x jsType continue =
1717 jsFold op checks value = foldl1 (InfixExpr () op) (map ($value) checks)
1818 throw = obj ["_E","raise"] <| InfixExpr () OpAdd msg x
1919 msg = string ("invalid input, expecting " ++ show jsType ++ " but got ")
20− checks = case jsType of
21− JSNumber -> [typeof "number"]
22− JSBoolean -> [typeof "boolean"]
23− JSString -> [typeof "string", instanceof "String"]
24− JSArray -> [(obj ["_U","isJSArray"] <|)]
25− JSObject fields -> [jsFold OpLAnd (typeof "object" : map member fields)]
20+ checks =
21+ case jsType of
22+ JSNumber -> [typeof "number"]
23+ JSBoolean -> [typeof "boolean"]
24+ JSString -> [typeof "string", instanceof "String"]
25+ JSArray -> [(obj ["_U","isJSArray"] <|)]
26+ JSObject fields -> [jsFold OpLAnd (typeof "object" : map member fields)]
2627
2728incoming :: CanonicalType -> Expression ()
2829incoming tipe =
@@ -58,13 +59,17 @@ inc tipe x =
5859 App f args ->
5960 case f : args of
6061 Type name : [t]
61− | Var.isMaybe name -> CondExpr () (equal x (NullLit ()))
62− (V.value "Maybe" "Nothing")
63− (V.value "Maybe" "Just" <| inc t x)
62+ | Var.isMaybe name ->
63+ CondExpr ()
64+ (equal x (NullLit ()))
65+ (V.value "Maybe" "Nothing")
66+ (V.value "Maybe" "Just" <| inc t x)
6467
65− | Var.isList name -> check x JSArray (obj ["_L","fromArray"] <| array)
68+ | Var.isList name ->
69+ check x JSArray (obj ["_L","fromArray"] <| array)
6670
67− | Var.isArray name -> check x JSArray (obj ["_A","fromJSArray"] <| array)
71+ | Var.isArray name ->
72+ check x JSArray (obj ["_A","fromJSArray"] <| array)
6873 where
6974 array = DotRef () x (var "map") <| incoming t
7075
@@ -120,10 +125,11 @@ out tipe x =
120125 numArgs = length ts - 1
121126 args = map (\n -> '_' : show n) [0..]
122127 values = zipWith inc (init ts) (map ref args)
123− func body = function (take numArgs args)
124− [ VarDeclStmt () [VarDecl () (var "_r") (Just body)]
125− , ret (out (last ts) (ref "_r"))
126− ]
128+ func body =
129+ function (take numArgs args)
130+ [ VarDeclStmt () [VarDecl () (var "_r") (Just body)]
131+ , ret (out (last ts) (ref "_r"))
132+ ]
127133
128134 Var _ -> error "type variables should not be allowed through input ports"
129135
@@ -139,9 +145,10 @@ out tipe x =
139145 case f : args of
140146 Type name : [t]
141147 | Var.isMaybe name ->
142− CondExpr () (equal (DotRef () x (var "ctor")) (string "Nothing"))
143− (NullLit ())
144− (out t (DotRef () x (var "_0")))
148+ CondExpr ()
149+ (equal (DotRef () x (var "ctor")) (string "Nothing"))
150+ (NullLit ())
151+ (out t (DotRef () x (var "_0")))
145152
146153 | Var.isArray name ->
147154 DotRef () (obj ["_A","toJSArray"] <| x) (var "map") <| outgoing t