@@ -21,24 +21,24 @@ module Language.PureScript.Sugar.TypeClasses
23import Language.PureScript.AST hiding (isExported)
23import Language.PureScript.AST hiding (isExported)
24−import Language.PureScript.Names
25−import Language.PureScript.Types
26−import Language.PureScript.Kinds
27−import Language.PureScript.Sugar.CaseDeclarations
28import Language.PureScript.Environment
24import Language.PureScript.Environment
29import Language.PureScript.Errors
25import Language.PureScript.Errors
30−import Language.PureScript.Supply
26+import Language.PureScript.Kinds
27+import Language.PureScript.Names
31import Language.PureScript.Pretty.Types (prettyPrintTypeAtom)
28import Language.PureScript.Pretty.Types (prettyPrintTypeAtom)
29+import Language.PureScript.Sugar.CaseDeclarations
30+import Language.PureScript.Supply
31+import Language.PureScript.Types
33import qualified Language.PureScript.Constants as C
33import qualified Language.PureScript.Constants as C
35import Control.Applicative
35import Control.Applicative
36+import Control.Arrow (first, second)
36import Control.Monad.Error
37import Control.Monad.Error
37import Control.Monad.State
38import Control.Monad.State
38−import Control.Arrow (first, second)
39import Data.List ((\\), find)
39import Data.List ((\\), find)
40−import Data.Monoid ((<>))
41import Data.Maybe (catMaybes, mapMaybe, isJust)
40import Data.Maybe (catMaybes, mapMaybe, isJust)
41+import Data.Monoid ((<>))
43import qualified Data.Map as M
43import qualified Data.Map as M
@@ -158,12 +158,12 @@ desugarDecl mn exps = go
159 go d@(TypeClassDeclaration name args implies members) = do
159 go d@(TypeClassDeclaration name args implies members) = do
160 modify (M.insert (mn, name) d)
160 modify (M.insert (mn, name) d)
161− return $ (Nothing, d : typeClassDictionaryDeclaration name args implies members : map (typeClassMemberToDictionaryAccessor mn name args) members)
161+ return (Nothing, d : typeClassDictionaryDeclaration name args implies members : map (typeClassMemberToDictionaryAccessor mn name args) members)
162 go d@(ExternInstanceDeclaration name _ className tys) = return (expRef name className tys, [d])
162 go d@(ExternInstanceDeclaration name _ className tys) = return (expRef name className tys, [d])
163 go d@(TypeInstanceDeclaration name deps className tys members) = do
163 go d@(TypeInstanceDeclaration name deps className tys members) = do
164 desugared <- lift $ desugarCases members
164 desugared <- lift $ desugarCases members
165 dictDecl <- typeInstanceDictionaryDeclaration name mn deps className tys desugared
165 dictDecl <- typeInstanceDictionaryDeclaration name mn deps className tys desugared
166− return $ (expRef name className tys, [d, dictDecl])
166+ return (expRef name className tys, [d, dictDecl])
167 go (PositionedDeclaration pos com d) = do
167 go (PositionedDeclaration pos com d) = do
168 (dr, ds) <- rethrowWithPosition pos $ desugarDecl mn exps d
168 (dr, ds) <- rethrowWithPosition pos $ desugarDecl mn exps d
169 return (dr, map (PositionedDeclaration pos com) ds)
169 return (dr, map (PositionedDeclaration pos com) ds)
@@ -212,9 +212,10 @@ typeClassDictionaryDeclaration name args implies members =
213typeClassMemberToDictionaryAccessor :: ModuleName -> ProperName -> [(String, Maybe Kind)] -> Declaration -> Declaration
213typeClassMemberToDictionaryAccessor :: ModuleName -> ProperName -> [(String, Maybe Kind)] -> Declaration -> Declaration
214typeClassMemberToDictionaryAccessor mn name args (TypeDeclaration ident ty) =
214typeClassMemberToDictionaryAccessor mn name args (TypeDeclaration ident ty) =
215+ let className = Qualified (Just mn) name
215− ValueDeclaration ident TypeClassAccessorImport [] $ Right $
216+ in ValueDeclaration ident TypeClassAccessorImport [] $ Right $
216− TypedValue False (Abs (Left $ Ident "dict") (Accessor (runIdent ident) (Var $ Qualified Nothing (Ident "dict")))) $
217+ TypedValue False (TypeClassDictionaryAccessor className ident) $
217− moveQuantifiersToFront (quantify (ConstrainedType [(Qualified (Just mn) name, map (TypeVar . fst) args)] ty))
218+ moveQuantifiersToFront (quantify (ConstrainedType [(className, map (TypeVar . fst) args)] ty))
218typeClassMemberToDictionaryAccessor mn name args (PositionedDeclaration pos com d) =
219typeClassMemberToDictionaryAccessor mn name args (PositionedDeclaration pos com d) =
219 PositionedDeclaration pos com $ typeClassMemberToDictionaryAccessor mn name args d
220 PositionedDeclaration pos com $ typeClassMemberToDictionaryAccessor mn name args d
220typeClassMemberToDictionaryAccessor _ _ _ _ = error "Invalid declaration in type class definition"
221typeClassMemberToDictionaryAccessor _ _ _ _ = error "Invalid declaration in type class definition"