@@ -61,7 +61,7 @@ import Language.PureScript.Types
6161-- | Infer the types of multiple mutually-recursive values, and return elaborated values including
6262-- type class dictionaries and type annotations.
6363typesOf ::
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) =>
6565 ModuleName ->
6666 [(Ident, Expr)] ->
6767 m [(Ident, (Expr, Type))]
@@ -93,7 +93,7 @@ type TypeData = M.Map (ModuleName, Ident) (Type, NameKind, NameVisibility)
9393type UntypedData = [(Ident, Type)]
9494
9595typeDictionaryForBindingGroup ::
96− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
96+ (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
9797 ModuleName ->
9898 [(Ident, Expr)] ->
9999 m ([(Ident, Expr)], [(Ident, (Expr, Type, Bool))], TypeData, UntypedData)
@@ -118,7 +118,7 @@ typeDictionaryForBindingGroup moduleName vals = do
118118 return (untyped, typed, dict, untypedDict)
119119
120120checkTypedBindingGroupElement ::
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) =>
122122 ModuleName ->
123123 (Ident, (Expr, Type, Bool)) ->
124124 TypeData ->
@@ -137,7 +137,7 @@ checkTypedBindingGroupElement mn (ident, (val', ty, checkType)) dict = do
137137 return (ident, (val'', ty''))
138138
139139typeForBindingGroupElement ::
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) =>
141141 Bool ->
142142 (Ident, Expr) ->
143143 TypeData ->
@@ -168,7 +168,7 @@ overTypes f = let (_, f', _) = everywhereOnValues id g id in f'
168168
169169-- | Replace type class dictionary placeholders with inferred type class dictionaries
170170replaceTypeClassDictionaries ::
171− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
171+ (MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
172172 ModuleName ->
173173 Expr ->
174174 m Expr
@@ -181,7 +181,7 @@ replaceTypeClassDictionaries mn =
181181
182182-- | Check the kind of a type, failing if it is not of kind *.
183183checkTypeKind ::
184− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
184+ (MonadState CheckState m, MonadError MultipleErrors m) =>
185185 Type ->
186186 Kind ->
187187 m ()
@@ -193,7 +193,7 @@ checkTypeKind ty kind = guardWith (errorMessage (ExpectedType ty kind)) $ kind =
193193-- This is necessary during type checking to avoid unifying a polymorphic type with a
194194-- unification variable.
195195instantiatePolyTypeWithUnknowns ::
196− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
196+ (MonadState CheckState m, MonadError MultipleErrors m) =>
197197 Expr ->
198198 Type ->
199199 m (Expr, Type)
@@ -207,14 +207,14 @@ instantiatePolyTypeWithUnknowns val ty = return (val, ty)
207207
208208-- | Infer a type for a value, rethrowing any error to provide a more useful error message
209209infer ::
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) =>
211211 Expr ->
212212 m Expr
213213infer val = rethrow (addHint (ErrorInferringType val)) $ infer' val
214214
215215-- | Infer a type for a value
216216infer' ::
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) =>
218218 Expr ->
219219 m Expr
220220infer' v@(Literal (NumericLiteral (Left _))) = return $ TypedValue True v tyInt
@@ -303,7 +303,7 @@ infer' (PositionedValue pos c val) = warnAndRethrowWithPosition pos $ do
303303infer' _ = internalError "Invalid argument to infer"
304304
305305inferLetBinding ::
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) =>
307307 [Declaration] ->
308308 [Declaration] ->
309309 Expr ->
@@ -341,7 +341,7 @@ inferLetBinding _ _ _ _ = internalError "Invalid argument to inferLetBinding"
341341
342342-- | Infer the types of variables brought into scope by a binder
343343inferBinder :: 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) =>
345345 Type ->
346346 Binder ->
347347 m (M.Map Ident Type)
@@ -420,7 +420,7 @@ binderRequiresMonotype _ = True
420420
421421-- | Instantiate polytypes only when necessitated by a binder.
422422instantiateForBinders ::
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) =>
424424 [Expr] ->
425425 [CaseAlternative] ->
426426 m ([Expr], [Type])
@@ -437,7 +437,7 @@ instantiateForBinders vals cas = unzip <$> zipWithM (\val inst -> do
437437-- Check the types of the return values in a set of binders in a case statement
438438--
439439checkBinders ::
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) =>
441441 [Type] ->
442442 Type ->
443443 [CaseAlternative] ->
@@ -467,7 +467,7 @@ checkBinders nvals ret (CaseAlternative binders result : bs) = do
467467-- Check the type of a value, rethrowing errors to provide a better error message
468468--
469469check ::
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) =>
471471 Expr ->
472472 Type ->
473473 m Expr
@@ -478,7 +478,7 @@ check val ty = rethrow (addHint (ErrorCheckingType val ty)) $ check' val ty
478478--
479479check'
480480 :: 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)
482482 => Expr
483483 -> Type
484484 -> m Expr
@@ -641,7 +641,7 @@ check' val ty = do
641641-- The @lax@ parameter controls whether or not every record member has to be provided. For object updates, this is not the case.
642642--
643643checkProperties ::
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) =>
645645 Expr ->
646646 [(String, Expr)] ->
647647 Type ->
@@ -673,7 +673,7 @@ checkProperties expr ps row lax = let (ts, r') = rowToList row in go ps ts r' wh
673673
674674-- | Check the type of a function application, rethrowing errors to provide a better error message
675675checkFunctionApplication ::
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) =>
677677 Expr ->
678678 Type ->
679679 Expr ->
@@ -685,7 +685,7 @@ checkFunctionApplication fn fnTy arg ret = rethrow (addHint (ErrorInApplication
685685
686686-- | Check the type of a function application
687687checkFunctionApplication' ::
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) =>
689689 Expr ->
690690 Type ->
691691 Expr ->
@@ -723,7 +723,7 @@ checkFunctionApplication' _ fnTy arg _ = throwError . errorMessage $ CannotApply
723723-- | Compute the meet of two types, i.e. the most general type which both types subsume.
724724-- TODO: is this really needed?
725725meet ::
726− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
726+ (MonadState CheckState m, MonadError MultipleErrors m) =>
727727 Expr ->
728728 Expr ->
729729 Type ->