@@ -73,6 +73,9 @@ dataGeneric = ModuleName [ ProperName "Data", ProperName "Generic" ]
73dataMaybe :: ModuleName
73dataMaybe :: ModuleName
74dataMaybe = ModuleName [ ProperName "Data", ProperName "Maybe" ]
74dataMaybe = ModuleName [ ProperName "Data", ProperName "Maybe" ]
76+typesProxy :: ModuleName
77+typesProxy = ModuleName [ ProperName "Type", ProperName "Proxy" ]
76deriveGeneric :: (Functor m, MonadError MultipleErrors m, MonadSupply m) => ModuleName -> [Declaration] -> ProperName -> [Type] -> m [Declaration]
79deriveGeneric :: (Functor m, MonadError MultipleErrors m, MonadSupply m) => ModuleName -> [Declaration] -> ProperName -> [Type] -> m [Declaration]
77deriveGeneric mn ds tyConNm args = do
80deriveGeneric mn ds tyConNm args = do
78 tyCon <- findTypeDecl tyConNm ds
81 tyCon <- findTypeDecl tyConNm ds
@@ -107,7 +110,7 @@ mkSpineFunction mn (DataDeclaration _ _ _ args) = lamCase "$x" <$> mapM mkCtorCl
107 return $ CaseAlternative [ConstructorBinder (Qualified (Just mn) ctorName) (map VarBinder idents)] (Right (caseResult idents))
110 return $ CaseAlternative [ConstructorBinder (Qualified (Just mn) ctorName) (map VarBinder idents)] (Right (caseResult idents))
109 caseResult idents =
112 caseResult idents =
110− App (prodConstructor (StringLiteral . runProperName $ ctorName))
113+ App (prodConstructor (StringLiteral . showQualified runProperName $ Qualified (Just mn) ctorName))
111 . ArrayLiteral
114 . ArrayLiteral
112 $ zipWith toSpineFun (map (Var . Qualified Nothing) idents) tys
115 $ zipWith toSpineFun (map (Var . Qualified Nothing) idents) tys
@@ -121,19 +124,21 @@ mkSpineFunction mn (PositionedDeclaration _ _ d) = mkSpineFunction mn d
121mkSpineFunction _ _ = internalError "mkSpineFunction: expected DataDeclaration"
124mkSpineFunction _ _ = internalError "mkSpineFunction: expected DataDeclaration"
123mkSignatureFunction :: ModuleName -> Declaration -> [Type] -> Expr
126mkSignatureFunction :: ModuleName -> Declaration -> [Type] -> Expr
124−mkSignatureFunction _ (DataDeclaration _ _ tyArgs args) classArgs = lamNull . mkSigProd $ map mkProdClause args
127+mkSignatureFunction mn (DataDeclaration _ name tyArgs args) classArgs = lamNull . mkSigProd $ map mkProdClause args
126 mkSigProd :: [Expr] -> Expr
129 mkSigProd :: [Expr] -> Expr
127− mkSigProd = App (Constructor (Qualified (Just dataGeneric) (ProperName "SigProd"))) . ArrayLiteral
130+ mkSigProd = App (App (Constructor (Qualified (Just dataGeneric) (ProperName "SigProd")))
131+ (StringLiteral (showQualified runProperName (Qualified (Just mn) name)))
129 mkSigRec :: [Expr] -> Expr
134 mkSigRec :: [Expr] -> Expr
130 mkSigRec = App (Constructor (Qualified (Just dataGeneric) (ProperName "SigRecord"))) . ArrayLiteral
135 mkSigRec = App (Constructor (Qualified (Just dataGeneric) (ProperName "SigRecord"))) . ArrayLiteral
132 proxy :: Type -> Type
137 proxy :: Type -> Type
133− proxy = TypeApp (TypeConstructor (Qualified (Just dataGeneric) (ProperName "Proxy")))
138+ proxy = TypeApp (TypeConstructor (Qualified (Just typesProxy) (ProperName "Proxy")))
135 mkProdClause :: (ProperName, [Type]) -> Expr
140 mkProdClause :: (ProperName, [Type]) -> Expr
136− mkProdClause (ctorName, tys) = ObjectLiteral [ ("sigConstructor", StringLiteral (runProperName ctorName))
141+ mkProdClause (ctorName, tys) = ObjectLiteral [ ("sigConstructor", StringLiteral (showQualified runProperName (Qualified (Just mn) ctorName)))
137 , ("sigValues", ArrayLiteral . map (mkProductSignature . instantiate) $ tys)
142 , ("sigValues", ArrayLiteral . map (mkProductSignature . instantiate) $ tys)
@@ -168,7 +173,7 @@ mkFromSpineFunction mn (DataDeclaration _ _ _ args) = lamCase "$x" <$> (addCatch
168 mkAlternative :: (ProperName, [Type]) -> m CaseAlternative
173 mkAlternative :: (ProperName, [Type]) -> m CaseAlternative
169 mkAlternative (ctorName, tys) = do
174 mkAlternative (ctorName, tys) = do
170 idents <- replicateM (length tys) (fmap Ident freshName)
175 idents <- replicateM (length tys) (fmap Ident freshName)
171− return $ CaseAlternative [ prodBinder [ StringBinder (runProperName ctorName), ArrayBinder (map VarBinder idents)]]
176+ return $ CaseAlternative [ prodBinder [ StringBinder (showQualified runProperName (Qualified (Just mn) ctorName)), ArrayBinder (map VarBinder idents)]]
173 $ liftApplicative (mkJust $ Constructor (Qualified (Just mn) ctorName))
178 $ liftApplicative (mkJust $ Constructor (Qualified (Just mn) ctorName))
174 (zipWith fromSpineFun (map (Var . Qualified Nothing) idents) tys)
179 (zipWith fromSpineFun (map (Var . Qualified Nothing) idents) tys)