@@ -62,7 +62,7 @@ import Language.PureScript.Types
62-- | Infer the types of multiple mutually-recursive values, and return elaborated values including
62-- | Infer the types of multiple mutually-recursive values, and return elaborated values including
63-- type class dictionaries and type annotations.
63-- type class dictionaries and type annotations.
65− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
65+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
66 ModuleName ->
66 ModuleName ->
67 [(Ident, Expr)] ->
67 [(Ident, Expr)] ->
68 m [(Ident, (Expr, Type))]
68 m [(Ident, (Expr, Type))]
@@ -109,7 +109,7 @@ type TypeData = M.Map (ModuleName, Ident) (Type, NameKind, NameVisibility)
109type UntypedData = [(Ident, Type)]
109type UntypedData = [(Ident, Type)]
111typeDictionaryForBindingGroup ::
111typeDictionaryForBindingGroup ::
112− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
112+ (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
113 ModuleName ->
113 ModuleName ->
114 [(Ident, Expr)] ->
114 [(Ident, Expr)] ->
115 m ([(Ident, Expr)], [(Ident, (Expr, Type, Bool))], TypeData, UntypedData)
115 m ([(Ident, Expr)], [(Ident, (Expr, Type, Bool))], TypeData, UntypedData)
@@ -134,7 +134,7 @@ typeDictionaryForBindingGroup moduleName vals = do
134 return (untyped, typed, dict, untypedDict)
134 return (untyped, typed, dict, untypedDict)
136checkTypedBindingGroupElement ::
136checkTypedBindingGroupElement ::
137− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
137+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
138 ModuleName ->
138 ModuleName ->
139 (Ident, (Expr, Type, Bool)) ->
139 (Ident, (Expr, Type, Bool)) ->
140 TypeData ->
140 TypeData ->
@@ -153,7 +153,7 @@ checkTypedBindingGroupElement mn (ident, (val', ty, checkType)) dict = do
153 return (ident, (val'', ty''))
153 return (ident, (val'', ty''))
155typeForBindingGroupElement ::
155typeForBindingGroupElement ::
156− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
156+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
157 (Ident, Expr) ->
157 (Ident, Expr) ->
158 TypeData ->
158 TypeData ->
159 UntypedData ->
159 UntypedData ->
@@ -179,10 +179,10 @@ overTypes f = let (_, f', _) = everywhereOnValues id g id in f'
179 g (TypedValue checkTy val t) = TypedValue checkTy val (f t)
179 g (TypedValue checkTy val t) = TypedValue checkTy val (f t)
180 g (TypeClassDictionary (nm, tys) sco) = TypeClassDictionary (nm, map f tys) sco
180 g (TypeClassDictionary (nm, tys) sco) = TypeClassDictionary (nm, map f tys) sco
181 g other = other
181 g other = other
183-- | Check the kind of a type, failing if it is not of kind *.
183-- | Check the kind of a type, failing if it is not of kind *.
184checkTypeKind ::
184checkTypeKind ::
185− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
185+ (MonadState CheckState m, MonadError MultipleErrors m) =>
@@ -194,7 +194,7 @@ checkTypeKind ty kind = guardWith (errorMessage (ExpectedType ty kind)) $ kind =
194-- This is necessary during type checking to avoid unifying a polymorphic type with a
194-- This is necessary during type checking to avoid unifying a polymorphic type with a
195-- unification variable.
195-- unification variable.
196instantiatePolyTypeWithUnknowns ::
196instantiatePolyTypeWithUnknowns ::
197− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
197+ (MonadState CheckState m, MonadError MultipleErrors m) =>
200 m (Expr, Type)
200 m (Expr, Type)
@@ -208,14 +208,14 @@ instantiatePolyTypeWithUnknowns val ty = return (val, ty)
209-- | Infer a type for a value, rethrowing any error to provide a more useful error message
209-- | Infer a type for a value, rethrowing any error to provide a more useful error message
211− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
211+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
214infer val = rethrow (addHint (ErrorInferringType val)) $ infer' val
214infer val = rethrow (addHint (ErrorInferringType val)) $ infer' val
216-- | Infer a type for a value
216-- | Infer a type for a value
218− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
218+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
221infer' v@(Literal (NumericLiteral (Left _))) = return $ TypedValue True v tyInt
221infer' v@(Literal (NumericLiteral (Left _))) = return $ TypedValue True v tyInt
@@ -304,7 +304,7 @@ infer' (PositionedValue pos c val) = warnAndRethrowWithPosition pos $ do
304infer' _ = internalError "Invalid argument to infer"
304infer' _ = internalError "Invalid argument to infer"
306inferLetBinding ::
306inferLetBinding ::
307− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
307+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
308 [Declaration] ->
308 [Declaration] ->
309 [Declaration] ->
309 [Declaration] ->
@@ -342,7 +342,7 @@ inferLetBinding _ _ _ _ = internalError "Invalid argument to inferLetBinding"
343-- | Infer the types of variables brought into scope by a binder
343-- | Infer the types of variables brought into scope by a binder
344inferBinder :: forall m.
344inferBinder :: forall m.
345− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
345+ (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
347 Binder ->
347 Binder ->
348 m (M.Map Ident Type)
348 m (M.Map Ident Type)
@@ -421,7 +421,7 @@ binderRequiresMonotype _ = True
422-- | Instantiate polytypes only when necessitated by a binder.
422-- | Instantiate polytypes only when necessitated by a binder.
423instantiateForBinders ::
423instantiateForBinders ::
424− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
424+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
425 [Expr] ->
425 [Expr] ->
426 [CaseAlternative] ->
426 [CaseAlternative] ->
427 m ([Expr], [Type])
427 m ([Expr], [Type])
@@ -438,7 +438,7 @@ instantiateForBinders vals cas = unzip <$> zipWithM (\val inst -> do
438-- Check the types of the return values in a set of binders in a case statement
438-- Check the types of the return values in a set of binders in a case statement
440checkBinders ::
440checkBinders ::
441− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
441+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
442 [Type] ->
442 [Type] ->
444 [CaseAlternative] ->
444 [CaseAlternative] ->
@@ -468,7 +468,7 @@ checkBinders nvals ret (CaseAlternative binders result : bs) = do
468-- Check the type of a value, rethrowing errors to provide a better error message
468-- Check the type of a value, rethrowing errors to provide a better error message
471− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
471+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
@@ -479,7 +479,7 @@ check val ty = rethrow (addHint (ErrorCheckingType val ty)) $ check' val ty
481 :: forall m
481 :: forall m
482− . (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
482+ . (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
485 -> m Expr
485 -> m Expr
@@ -642,7 +642,7 @@ check' val ty = do
642-- The @lax@ parameter controls whether or not every record member has to be provided. For object updates, this is not the case.
642-- The @lax@ parameter controls whether or not every record member has to be provided. For object updates, this is not the case.
644checkProperties ::
644checkProperties ::
645− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
645+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
647 [(String, Expr)] ->
647 [(String, Expr)] ->
@@ -674,7 +674,7 @@ checkProperties expr ps row lax = let (ts, r') = rowToList row in go ps ts r' wh
675-- | Check the type of a function application, rethrowing errors to provide a better error message
675-- | Check the type of a function application, rethrowing errors to provide a better error message
676checkFunctionApplication ::
676checkFunctionApplication ::
677− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
677+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
@@ -686,7 +686,7 @@ checkFunctionApplication fn fnTy arg ret = rethrow (addHint (ErrorInApplication
687-- | Check the type of a function application
687-- | Check the type of a function application
688checkFunctionApplication' ::
688checkFunctionApplication' ::
689− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
689+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
@@ -724,7 +724,7 @@ checkFunctionApplication' _ fnTy arg _ = throwError . errorMessage $ CannotApply
724-- | Compute the meet of two types, i.e. the most general type which both types subsume.
724-- | Compute the meet of two types, i.e. the most general type which both types subsume.
725-- TODO: is this really needed?
725-- TODO: is this really needed?
727− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
727+ (MonadState CheckState m, MonadError MultipleErrors m) =>