@@ -62,7 +62,7 @@ import Language.PureScript.Types
6262-- | Infer the types of multiple mutually-recursive values, and return elaborated values including
6363-- type class dictionaries and type annotations.
6464typesOf ::
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) =>
6666 ModuleName ->
6767 [(Ident, Expr)] ->
6868 m [(Ident, (Expr, Type))]
@@ -109,7 +109,7 @@ type TypeData = M.Map (ModuleName, Ident) (Type, NameKind, NameVisibility)
109109type UntypedData = [(Ident, Type)]
110110
111111typeDictionaryForBindingGroup ::
112− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
112+ (MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) =>
113113 ModuleName ->
114114 [(Ident, Expr)] ->
115115 m ([(Ident, Expr)], [(Ident, (Expr, Type, Bool))], TypeData, UntypedData)
@@ -134,7 +134,7 @@ typeDictionaryForBindingGroup moduleName vals = do
134134 return (untyped, typed, dict, untypedDict)
135135
136136checkTypedBindingGroupElement ::
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) =>
138138 ModuleName ->
139139 (Ident, (Expr, Type, Bool)) ->
140140 TypeData ->
@@ -153,7 +153,7 @@ checkTypedBindingGroupElement mn (ident, (val', ty, checkType)) dict = do
153153 return (ident, (val'', ty''))
154154
155155typeForBindingGroupElement ::
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) =>
157157 (Ident, Expr) ->
158158 TypeData ->
159159 UntypedData ->
@@ -179,10 +179,10 @@ overTypes f = let (_, f', _) = everywhereOnValues id g id in f'
179179 g (TypedValue checkTy val t) = TypedValue checkTy val (f t)
180180 g (TypeClassDictionary (nm, tys) sco) = TypeClassDictionary (nm, map f tys) sco
181181 g other = other
182−
182+
183183-- | Check the kind of a type, failing if it is not of kind *.
184184checkTypeKind ::
185− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
185+ (MonadState CheckState m, MonadError MultipleErrors m) =>
186186 Type ->
187187 Kind ->
188188 m ()
@@ -194,7 +194,7 @@ checkTypeKind ty kind = guardWith (errorMessage (ExpectedType ty kind)) $ kind =
194194-- This is necessary during type checking to avoid unifying a polymorphic type with a
195195-- unification variable.
196196instantiatePolyTypeWithUnknowns ::
197− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
197+ (MonadState CheckState m, MonadError MultipleErrors m) =>
198198 Expr ->
199199 Type ->
200200 m (Expr, Type)
@@ -208,14 +208,14 @@ instantiatePolyTypeWithUnknowns val ty = return (val, ty)
208208
209209-- | Infer a type for a value, rethrowing any error to provide a more useful error message
210210infer ::
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) =>
212212 Expr ->
213213 m Expr
214214infer val = rethrow (addHint (ErrorInferringType val)) $ infer' val
215215
216216-- | Infer a type for a value
217217infer' ::
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) =>
219219 Expr ->
220220 m Expr
221221infer' v@(Literal (NumericLiteral (Left _))) = return $ TypedValue True v tyInt
@@ -304,7 +304,7 @@ infer' (PositionedValue pos c val) = warnAndRethrowWithPosition pos $ do
304304infer' _ = internalError "Invalid argument to infer"
305305
306306inferLetBinding ::
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) =>
308308 [Declaration] ->
309309 [Declaration] ->
310310 Expr ->
@@ -342,7 +342,7 @@ inferLetBinding _ _ _ _ = internalError "Invalid argument to inferLetBinding"
342342
343343-- | Infer the types of variables brought into scope by a binder
344344inferBinder :: 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) =>
346346 Type ->
347347 Binder ->
348348 m (M.Map Ident Type)
@@ -421,7 +421,7 @@ binderRequiresMonotype _ = True
421421
422422-- | Instantiate polytypes only when necessitated by a binder.
423423instantiateForBinders ::
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) =>
425425 [Expr] ->
426426 [CaseAlternative] ->
427427 m ([Expr], [Type])
@@ -438,7 +438,7 @@ instantiateForBinders vals cas = unzip <$> zipWithM (\val inst -> do
438438-- Check the types of the return values in a set of binders in a case statement
439439--
440440checkBinders ::
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) =>
442442 [Type] ->
443443 Type ->
444444 [CaseAlternative] ->
@@ -468,7 +468,7 @@ checkBinders nvals ret (CaseAlternative binders result : bs) = do
468468-- Check the type of a value, rethrowing errors to provide a better error message
469469--
470470check ::
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) =>
472472 Expr ->
473473 Type ->
474474 m Expr
@@ -479,7 +479,7 @@ check val ty = rethrow (addHint (ErrorCheckingType val ty)) $ check' val ty
479479--
480480check'
481481 :: 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)
483483 => Expr
484484 -> Type
485485 -> m Expr
@@ -642,7 +642,7 @@ check' val ty = do
642642-- The @lax@ parameter controls whether or not every record member has to be provided. For object updates, this is not the case.
643643--
644644checkProperties ::
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) =>
646646 Expr ->
647647 [(String, Expr)] ->
648648 Type ->
@@ -674,7 +674,7 @@ checkProperties expr ps row lax = let (ts, r') = rowToList row in go ps ts r' wh
674674
675675-- | Check the type of a function application, rethrowing errors to provide a better error message
676676checkFunctionApplication ::
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) =>
678678 Expr ->
679679 Type ->
680680 Expr ->
@@ -686,7 +686,7 @@ checkFunctionApplication fn fnTy arg ret = rethrow (addHint (ErrorInApplication
686686
687687-- | Check the type of a function application
688688checkFunctionApplication' ::
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) =>
690690 Expr ->
691691 Type ->
692692 Expr ->
@@ -724,7 +724,7 @@ checkFunctionApplication' _ fnTy arg _ = throwError . errorMessage $ CannotApply
724724-- | Compute the meet of two types, i.e. the most general type which both types subsume.
725725-- TODO: is this really needed?
726726meet ::
727− (Functor m, Applicative m, MonadState CheckState m, MonadError MultipleErrors m) =>
727+ (MonadState CheckState m, MonadError MultipleErrors m) =>
728728 Expr ->
729729 Expr ->
730730 Type ->