@@ -61,7 +61,7 @@ import Language.PureScript.Types
61-- | Infer the types of multiple mutually-recursive values, and return elaborated values including
61-- | Infer the types of multiple mutually-recursive values, and return elaborated values including
62-- type class dictionaries and type annotations.
62-- type class dictionaries and type annotations.
64− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
64+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
65 ModuleName ->
65 ModuleName ->
66 [(Ident, Expr)] ->
66 [(Ident, Expr)] ->
67 m [(Ident, (Expr, Type))]
67 m [(Ident, (Expr, Type))]
@@ -93,7 +93,7 @@ type TypeData = M.Map (ModuleName, Ident) (Type, NameKind, NameVisibility)
93type UntypedData = [(Ident, Type)]
93type UntypedData = [(Ident, Type)]
95typeDictionaryForBindingGroup ::
95typeDictionaryForBindingGroup ::
96− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
96+ (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
97 ModuleName ->
97 ModuleName ->
98 [(Ident, Expr)] ->
98 [(Ident, Expr)] ->
99 m ([(Ident, Expr)], [(Ident, (Expr, Type, Bool))], TypeData, UntypedData)
99 m ([(Ident, Expr)], [(Ident, (Expr, Type, Bool))], TypeData, UntypedData)
@@ -118,7 +118,7 @@ typeDictionaryForBindingGroup moduleName vals = do
118 return (untyped, typed, dict, untypedDict)
118 return (untyped, typed, dict, untypedDict)
120checkTypedBindingGroupElement ::
120checkTypedBindingGroupElement ::
121− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
121+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
122 ModuleName ->
122 ModuleName ->
123 (Ident, (Expr, Type, Bool)) ->
123 (Ident, (Expr, Type, Bool)) ->
124 TypeData ->
124 TypeData ->
@@ -137,7 +137,7 @@ checkTypedBindingGroupElement mn (ident, (val', ty, checkType)) dict = do
137 return (ident, (val'', ty''))
137 return (ident, (val'', ty''))
139typeForBindingGroupElement ::
139typeForBindingGroupElement ::
140− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
140+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
142 (Ident, Expr) ->
142 (Ident, Expr) ->
143 TypeData ->
143 TypeData ->
@@ -168,7 +168,7 @@ overTypes f = let (_, f', _) = everywhereOnValues id g id in f'
169-- | Replace type class dictionary placeholders with inferred type class dictionaries
169-- | Replace type class dictionary placeholders with inferred type class dictionaries
170replaceTypeClassDictionaries ::
170replaceTypeClassDictionaries ::
171− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
171+ (MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
172 ModuleName ->
172 ModuleName ->
@@ -181,7 +181,7 @@ replaceTypeClassDictionaries mn =
182-- | Check the kind of a type, failing if it is not of kind *.
182-- | Check the kind of a type, failing if it is not of kind *.
183checkTypeKind ::
183checkTypeKind ::
184− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
184+ (MonadState CheckState m, MonadError MultipleErrors m) =>
@@ -193,7 +193,7 @@ checkTypeKind ty kind = guardWith (errorMessage (ExpectedType ty kind)) $ kind =
193-- This is necessary during type checking to avoid unifying a polymorphic type with a
193-- This is necessary during type checking to avoid unifying a polymorphic type with a
194-- unification variable.
194-- unification variable.
195instantiatePolyTypeWithUnknowns ::
195instantiatePolyTypeWithUnknowns ::
196− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
196+ (MonadState CheckState m, MonadError MultipleErrors m) =>
199 m (Expr, Type)
199 m (Expr, Type)
@@ -207,14 +207,14 @@ instantiatePolyTypeWithUnknowns val ty = return (val, ty)
208-- | Infer a type for a value, rethrowing any error to provide a more useful error message
208-- | Infer a type for a value, rethrowing any error to provide a more useful error message
210− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
210+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
213infer val = rethrow (addHint (ErrorInferringType val)) $ infer' val
213infer val = rethrow (addHint (ErrorInferringType val)) $ infer' val
215-- | Infer a type for a value
215-- | Infer a type for a value
217− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
217+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
220infer' v@(Literal (NumericLiteral (Left _))) = return $ TypedValue True v tyInt
220infer' v@(Literal (NumericLiteral (Left _))) = return $ TypedValue True v tyInt
@@ -303,7 +303,7 @@ infer' (PositionedValue pos c val) = warnAndRethrowWithPosition pos $ do
303infer' _ = internalError "Invalid argument to infer"
303infer' _ = internalError "Invalid argument to infer"
305inferLetBinding ::
305inferLetBinding ::
306− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
306+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
307 [Declaration] ->
307 [Declaration] ->
308 [Declaration] ->
308 [Declaration] ->
@@ -341,7 +341,7 @@ inferLetBinding _ _ _ _ = internalError "Invalid argument to inferLetBinding"
342-- | Infer the types of variables brought into scope by a binder
342-- | Infer the types of variables brought into scope by a binder
343inferBinder :: forall m.
343inferBinder :: forall m.
344− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
344+ (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
346 Binder ->
346 Binder ->
347 m (M.Map Ident Type)
347 m (M.Map Ident Type)
@@ -420,7 +420,7 @@ binderRequiresMonotype _ = True
421-- | Instantiate polytypes only when necessitated by a binder.
421-- | Instantiate polytypes only when necessitated by a binder.
422instantiateForBinders ::
422instantiateForBinders ::
423− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
423+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
424 [Expr] ->
424 [Expr] ->
425 [CaseAlternative] ->
425 [CaseAlternative] ->
426 m ([Expr], [Type])
426 m ([Expr], [Type])
@@ -437,7 +437,7 @@ instantiateForBinders vals cas = unzip <$> zipWithM (\val inst -> do
437-- Check the types of the return values in a set of binders in a case statement
437-- Check the types of the return values in a set of binders in a case statement
439checkBinders ::
439checkBinders ::
440− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
440+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
441 [Type] ->
441 [Type] ->
443 [CaseAlternative] ->
443 [CaseAlternative] ->
@@ -467,7 +467,7 @@ checkBinders nvals ret (CaseAlternative binders result : bs) = do
467-- Check the type of a value, rethrowing errors to provide a better error message
467-- Check the type of a value, rethrowing errors to provide a better error message
470− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
470+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
@@ -478,7 +478,7 @@ check val ty = rethrow (addHint (ErrorCheckingType val ty)) $ check' val ty
480 :: forall m
480 :: forall m
481− . (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
481+ . (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
484 -> m Expr
484 -> m Expr
@@ -641,7 +641,7 @@ check' val ty = do
641-- The @lax@ parameter controls whether or not every record member has to be provided. For object updates, this is not the case.
641-- The @lax@ parameter controls whether or not every record member has to be provided. For object updates, this is not the case.
643checkProperties ::
643checkProperties ::
644− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
644+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
646 [(String, Expr)] ->
646 [(String, Expr)] ->
@@ -673,7 +673,7 @@ checkProperties expr ps row lax = let (ts, r') = rowToList row in go ps ts r' wh
674-- | Check the type of a function application, rethrowing errors to provide a better error message
674-- | Check the type of a function application, rethrowing errors to provide a better error message
675checkFunctionApplication ::
675checkFunctionApplication ::
676− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
676+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
@@ -685,7 +685,7 @@ checkFunctionApplication fn fnTy arg ret = rethrow (addHint (ErrorInApplication
686-- | Check the type of a function application
686-- | Check the type of a function application
687checkFunctionApplication' ::
687checkFunctionApplication' ::
688− (Functor m, Applicative m, MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
688+ (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
@@ -723,7 +723,7 @@ checkFunctionApplication' _ fnTy arg _ = throwError . errorMessage $ CannotApply
723-- | Compute the meet of two types, i.e. the most general type which both types subsume.
723-- | Compute the meet of two types, i.e. the most general type which both types subsume.
724-- TODO: is this really needed?
724-- TODO: is this really needed?
726− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
726+ (MonadState CheckState m, MonadError MultipleErrors m) =>