@@ -81,7 +81,7 @@ desugarModule (Module name decls) = Module name <$> concat <$> mapM (desugarDecl
82-- __Test_Foo_string_foo = (\s -> s ++ s) :: String -> String
82-- __Test_Foo_string_foo = (\s -> s ++ s) :: String -> String
84−-- __Test_Foo_string :: Foo String
84+-- __Test_Foo_string :: {} -> Foo String
85-- __Test_Foo_string = { foo: __Test_Foo_string_foo :: String -> String (unchecked) }
85-- __Test_Foo_string = { foo: __Test_Foo_string_foo :: String -> String (unchecked) }
87-- __Test_Foo_array_foo :: forall a. (Foo a) => [a] -> [a]
87-- __Test_Foo_array_foo :: forall a. (Foo a) => [a] -> [a]
@@ -127,8 +127,11 @@ typeInstanceDictionaryDeclaration mn deps name ty decls = do
127 memberNames <- mapM (memberToNameAndValue memberTypes) decls
127 memberNames <- mapM (memberToNameAndValue memberTypes) decls
128 return $ ValueDeclaration entryName [] Nothing
128 return $ ValueDeclaration entryName [] Nothing
129 (TypedValue True
129 (TypedValue True
130− (foldr Abs (ObjectLiteral memberNames) (map (\n -> Ident ('_' : show n)) [1..length deps]))
130+ (foldr Abs (ObjectLiteral memberNames) (map (\n -> Ident ('_' : show n)) [1..max 1 (length deps)]))
131+ (quantify (if null deps then
132+ function unit (TypeApp (TypeConstructor name) ty)
131− (quantify (foldr function (TypeApp (TypeConstructor name) ty) (map (\(pn, ty') -> TypeApp (TypeConstructor pn) ty') deps)))
134+ foldr function (TypeApp (TypeConstructor name) ty) (map (\(pn, ty') -> TypeApp (TypeConstructor pn) ty') deps)))
134 memberToNameAndValue :: [(String, Type)] -> Declaration -> Desugar (String, Value)
137 memberToNameAndValue :: [(String, Type)] -> Declaration -> Desugar (String, Value)
@@ -136,8 +139,7 @@ typeInstanceDictionaryDeclaration mn deps name ty decls = do
136 memberType <- lift . maybe (Left "Type class member type not found") Right $ lookup (identToJs ident) tys
139 memberType <- lift . maybe (Left "Type class member type not found") Right $ lookup (identToJs ident) tys
137 memberName <- mkDictionaryEntryName mn name ty ident
140 memberName <- mkDictionaryEntryName mn name ty ident
138 return (identToJs ident, TypedValue False
141 return (identToJs ident, TypedValue False
139− (if null deps then Var (Qualified Nothing memberName)
140− else foldl App (Var (Qualified Nothing memberName)) (map (\n -> Var (Qualified Nothing (Ident ('_' : show n)))) [1..length deps]))
142+ (foldl App (Var (Qualified Nothing memberName)) (map (\n -> Var (Qualified Nothing (Ident ('_' : show n)))) [1..length deps]))
141 (quantify memberType))
143 (quantify memberType))
142 memberToNameAndValue _ _ = error "Invalid declaration in type instance definition"
144 memberToNameAndValue _ _ = error "Invalid declaration in type instance definition"