git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix a bunch of -Wall warnings
commitd1c3c08d6c953687e43acf5a4a9aee59cf344e1b authorPhil Freeman <paf31@cantab.net> dateFri 6 Dec 2013, 11:06 (13 years ago) parent6fa5829
22 files changed+133−212
src/Data/Generics/Extras.hs+1−1 src/Language/PureScript/CodeGen/Externs.hs+3−4 src/Language/PureScript/CodeGen/JS.hs+31−34 src/Language/PureScript/Operators.hs+2−4 src/Language/PureScript/Optimize.hs+1−1 src/Language/PureScript/Parser/Common.hs+2−2 src/Language/PureScript/Parser/Declarations.hs−10 src/Language/PureScript/Parser/State.hs−4 src/Language/PureScript/Parser/Values.hs+2−15 src/Language/PureScript/Pretty/Common.hs+6−13 src/Language/PureScript/Pretty/JS.hs+15−16 src/Language/PureScript/Pretty/Kinds.hs+1−5 src/Language/PureScript/Pretty/Types.hs+3−9 src/Language/PureScript/Pretty/Values.hs+10−15 src/Language/PureScript/TypeChecker.hs+5−8 src/Language/PureScript/TypeChecker/Kinds.hs+7−14 src/Language/PureScript/TypeChecker/Monad.hs−3 src/Language/PureScript/TypeChecker/Synonyms.hs+3−6 src/Language/PureScript/TypeChecker/Types.hs+39−44 src/Language/PureScript/Types.hs+1−1 src/Language/PureScript/Unknown.hs−1 src/Language/PureScript/Values.hs+1−2
src/Data/Generics/Extras.hs+1−1
@@ -18,7 +18,7 @@ module Data.Generics.Extras where
1818
1919import Data.Data
2020
21−everywhereM' :: (Monad m, Data d) => (forall d. (Data d) => d -> m d) -> d -> m d
21+everywhereM' :: (Monad m, Data d) => (forall d1. (Data d1) => d1 -> m d1) -> d -> m d
2222everywhereM' f x = do
2323 y <- f x
2424 gmapM (everywhereM' f) y
src/Language/PureScript/CodeGen/Externs.hs+3−4
@@ -16,7 +16,6 @@ module Language.PureScript.CodeGen.Externs (
1616 externToPs
1717) where
1818
19−import Data.List (intercalate)
2019import Data.Maybe (mapMaybe)
2120import qualified Data.Map as M
2221import Language.PureScript.Declarations
@@ -31,11 +30,11 @@ externToPs indent path env (ValueDeclaration name _) = do
3130externToPs indent path env (DataDeclaration name _ _) = do
3231 (kind, _) <- M.lookup (path, name) $ types env
3332 return $ replicate indent ' ' ++ "foreign import data " ++ show name ++ " :: " ++ prettyPrintKind kind
34−externToPs indent path env (ExternMemberDeclaration member name ty) =
33+externToPs indent _ _ (ExternMemberDeclaration member name ty) =
3534 return $ replicate indent ' ' ++ "foreign import member " ++ show member ++ " " ++ show name ++ " :: " ++ prettyPrintType ty
36−externToPs indent path env (ExternDataDeclaration name kind) =
35+externToPs indent _ _ (ExternDataDeclaration name kind) =
3736 return $ replicate indent ' ' ++ "foreign import data " ++ show name ++ " :: " ++ prettyPrintKind kind
38−externToPs indent path env (TypeSynonymDeclaration name args ty) =
37+externToPs indent _ _ (TypeSynonymDeclaration name args ty) =
3938 return $ replicate indent ' ' ++ "type " ++ show name ++ " " ++ unwords args ++ " = " ++ prettyPrintType ty
4039externToPs indent path env (ModuleDeclaration name decls) =
4140 return $ replicate indent ' ' ++ "module " ++ show name ++ " where\n" ++ unlines (mapMaybe (externToPs (indent + 2) (subModule path name) env) decls)
src/Language/PureScript/CodeGen/JS.hs+31−34
@@ -17,17 +17,12 @@ module Language.PureScript.CodeGen.JS (
1717 declToJs
1818) where
1919
20−import Data.Char
21−import Data.Maybe (fromMaybe, mapMaybe)
22−import Data.List (intercalate)
20+import Data.Maybe (mapMaybe)
2321import qualified Data.Map as M
24−import qualified Control.Arrow as A
25−import Control.Arrow ((<+>), second)
22+import Control.Arrow (second)
2623import Control.Monad (forM)
27−import Control.Applicative
2824
2925import Language.PureScript.TypeChecker (Environment, names)
30−import Language.PureScript.Types
3126import Language.PureScript.Values
3227import Language.PureScript.Names
3328import Language.PureScript.Declarations
@@ -37,16 +32,16 @@ import Language.PureScript.CodeGen.JS.AST as AST
3732import Language.PureScript.TypeChecker.Monad (NameKind(..))
3833
3934declToJs :: Maybe Ident -> ModulePath -> Declaration -> Environment -> Maybe [JS]
40−declToJs mod mp (ValueDeclaration ident (Abs args ret)) e =
35+declToJs curMod mp (ValueDeclaration ident (Abs args ret)) e =
4136 Just $ JSFunction (Just ident) args (JSBlock [JSReturn (valueToJs mp e ret)]) :
42− maybe [] (return . setProperty (identToJs ident) (JSVar ident)) mod
43−declToJs mod mp (ValueDeclaration ident val) e =
37+ maybe [] (return . setProperty (identToJs ident) (JSVar ident)) curMod
38+declToJs curMod mp (ValueDeclaration ident val) e =
4439 Just $ JSVariableIntroduction ident (Just (valueToJs mp e val)) :
45− maybe [] (return . setProperty (identToJs ident) (JSVar ident)) mod
46−declToJs mod _ (ExternMemberDeclaration member ident _) _ =
40+ maybe [] (return . setProperty (identToJs ident) (JSVar ident)) curMod
41+declToJs curMod _ (ExternMemberDeclaration member ident _) _ =
4742 Just $ JSFunction (Just ident) [Ident "value"] (JSBlock [JSReturn (JSAccessor member (JSVar (Ident "value")))]) :
48− maybe [] (return . setProperty (show ident) (JSVar ident)) mod
49−declToJs mod mp (DataDeclaration _ _ ctors) _ =
43+ maybe [] (return . setProperty (show ident) (JSVar ident)) curMod
44+declToJs curMod mp (DataDeclaration _ _ ctors) _ =
5045 Just $ flip concatMap ctors $ \(pn@(ProperName ctor), maybeTy) ->
5146 let
5247 ctorJs =
@@ -56,18 +51,18 @@ declToJs mod mp (DataDeclaration _ _ ctors) _ =
5651 (JSBlock [JSReturn
5752 (JSObjectLiteral [ ("ctor", JSStringLiteral (show (Qualified mp pn)))
5853 , ("value", JSVar (Ident "value")) ])])
59− in ctorJs : maybe [] (return . setProperty ctor (JSVar (Ident ctor))) mod
60−declToJs mod mp (ModuleDeclaration pn@(ProperName name) decls) env =
54+ in ctorJs : maybe [] (return . setProperty ctor (JSVar (Ident ctor))) curMod
55+declToJs curMod mp (ModuleDeclaration pn@(ProperName name) decls) env =
6156 Just $ [ JSVariableIntroduction (Ident name) Nothing
6257 , JSApp (JSFunction Nothing [Ident name]
6358 (JSBlock (concat $ mapMaybe (\decl -> declToJs (Just (Ident name)) (subModule mp pn) decl env) decls)))
6459 [JSAssignment (JSAssignVariable (Ident name))
6560 (JSBinary Or (JSVar (Ident name)) (JSObjectLiteral []))]] ++
66− maybe [] (return . setProperty name (JSVar (Ident name))) mod
61+ maybe [] (return . setProperty name (JSVar (Ident name))) curMod
6762declToJs _ _ _ _ = Nothing
6863
6964setProperty :: String -> JS -> Ident -> JS
70−setProperty prop val mod = JSAssignment (JSAssignProperty prop (JSAssignVariable mod)) val
65+setProperty prop val curMod = JSAssignment (JSAssignProperty prop (JSAssignVariable curMod)) val
7166
7267valueToJs :: ModulePath -> Environment -> Value -> JS
7368valueToJs _ _ (NumericLiteral n) = JSNumericLiteral n
@@ -76,7 +71,7 @@ valueToJs _ _ (BooleanLiteral b) = JSBooleanLiteral b
7671valueToJs m e (ArrayLiteral xs) = JSArrayLiteral (map (valueToJs m e) xs)
7772valueToJs m e (ObjectLiteral ps) = JSObjectLiteral (map (second (valueToJs m e)) ps)
7873valueToJs m e (ObjectUpdate o ps) = JSApp (JSAccessor "extend" (JSVar (Ident "Object"))) [ valueToJs m e o, JSObjectLiteral (map (second (valueToJs m e)) ps)]
79−valueToJs m e (Constructor name) = qualifiedToJS runProperName name
74+valueToJs _ _ (Constructor name) = qualifiedToJS runProperName name
8075valueToJs m e (Block sts) = JSApp (JSFunction Nothing [] (JSBlock (map (statementToJs m e) sts))) []
8176valueToJs m e (Case value binders) = runGen (bindersToJs m e binders (valueToJs m e value))
8277valueToJs m e (IfThenElse cond th el) = JSConditional (valueToJs m e cond) (valueToJs m e th) (valueToJs m e el)
@@ -90,12 +85,14 @@ valueToJs m e (Var ident) = case M.lookup (qualify m ident) (names e) of
9085 Just (_, Alias aliasModule aliasIdent) -> qualifiedToJS identToJs (Qualified aliasModule aliasIdent)
9186 _ -> qualifiedToJS identToJs ident
9287valueToJs m e (TypedValue val _) = valueToJs m e val
88+valueToJs _ _ _ = error "Invalid argument to valueToJs"
9389
9490qualifiedToJS :: (a -> String) -> Qualified a -> JS
9591qualifiedToJS f (Qualified (ModulePath parts) a) =
9692 delimited (f a : reverse (map show parts))
9793 where delimited [part] = JSVar (Ident (part))
98− delimited (part:parts) = JSAccessor part (delimited parts)
94+ delimited (part:parts') = JSAccessor part (delimited parts')
95+ delimited _ = error "Invalid argument to delimited"
9996
10097bindersToJs :: ModulePath -> Environment -> [(Binder, Value)] -> JS -> Gen JS
10198bindersToJs m e binders val = do
@@ -105,7 +102,7 @@ bindersToJs m e binders val = do
105102 [val]
106103
107104binderToJs :: ModulePath -> Environment -> String -> [JS] -> Binder -> Gen [JS]
108−binderToJs _ _ varName done NullBinder = return done
105+binderToJs _ _ _ done NullBinder = return done
109106binderToJs _ _ varName done (StringBinder str) =
110107 return [JSIfElse (JSBinary EqualTo (JSVar (Ident varName)) (JSStringLiteral str)) (JSBlock done) Nothing]
111108binderToJs _ _ varName done (NumberBinder num) =
@@ -114,9 +111,9 @@ binderToJs _ _ varName done (BooleanBinder True) =
114111 return [JSIfElse (JSVar (Ident varName)) (JSBlock done) Nothing]
115112binderToJs _ _ varName done (BooleanBinder False) =
116113 return [JSIfElse (JSUnary Not (JSVar (Ident varName))) (JSBlock done) Nothing]
117−binderToJs _ e varName done (VarBinder ident) =
114+binderToJs _ _ varName done (VarBinder ident) =
118115 return (JSVariableIntroduction ident (Just (JSVar (Ident varName))) : done)
119−binderToJs m e varName done (NullaryBinder ctor) =
116+binderToJs m _ varName done (NullaryBinder ctor) =
120117 return [JSIfElse (JSBinary EqualTo (JSAccessor "ctor" (JSVar (Ident varName))) (JSStringLiteral (show (uncurry Qualified $ qualify m ctor)))) (JSBlock done) Nothing]
121118binderToJs m e varName done (UnaryBinder ctor b) = do
122119 value <- fresh
@@ -125,11 +122,11 @@ binderToJs m e varName done (UnaryBinder ctor b) = do
125122binderToJs m e varName done (ObjectBinder bs) = go done bs
126123 where
127124 go :: [JS] -> [(String, Binder)] -> Gen [JS]
128− go done [] = return done
129− go done ((prop, binder):bs) = do
125+ go done' [] = return done'
126+ go done' ((prop, binder):bs') = do
130127 propVar <- fresh
131− done' <- go done bs
132− js <- binderToJs m e propVar done' binder
128+ done'' <- go done' bs'
129+ js <- binderToJs m e propVar done'' binder
133130 return (JSVariableIntroduction (Ident propVar) (Just (JSAccessor prop (JSVar (Ident varName)))) : js)
134131binderToJs m e varName done (ArrayBinder bs rest) = do
135132 js <- go done rest 0 bs
@@ -138,15 +135,15 @@ binderToJs m e varName done (ArrayBinder bs rest) = do
138135 cmp :: BinaryOperator
139136 cmp = maybe EqualTo (const GreaterThanOrEqualTo) rest
140137 go :: [JS] -> Maybe Binder -> Integer -> [Binder] -> Gen [JS]
141− go done Nothing _ [] = return done
142− go done (Just binder) index [] = do
138+ go done' Nothing _ [] = return done'
139+ go done' (Just binder) index [] = do
143140 restVar <- fresh
144− js <- binderToJs m e restVar done binder
141+ js <- binderToJs m e restVar done' binder
145142 return (JSVariableIntroduction (Ident restVar) (Just (JSApp (JSAccessor "slice" (JSVar (Ident varName))) [JSNumericLiteral (Left index)])) : js)
146− go done rest index (binder:bs) = do
143+ go done' rest' index (binder:bs') = do
147144 elVar <- fresh
148− done' <- go done rest (index + 1) bs
149− js <- binderToJs m e elVar done' binder
145+ done'' <- go done' rest' (index + 1) bs'
146+ js <- binderToJs m e elVar done'' binder
150147 return (JSVariableIntroduction (Ident elVar) (Just (JSIndexer (JSNumericLiteral (Left index)) (JSVar (Ident varName)))) : js)
151148binderToJs m e varName done (NamedBinder ident binder) = do
152149 js <- binderToJs m e varName done binder
@@ -167,5 +164,5 @@ statementToJs m e (If ifst) = ifToJs ifst
167164 ifToJs (IfStatement cond thens elses) = JSIfElse (valueToJs m e cond) (JSBlock (map (statementToJs m e) thens)) (fmap elseToJs elses)
168165 elseToJs :: ElseStatement -> JS
169166 elseToJs (Else sts) = JSBlock (map (statementToJs m e) sts)
170− elseToJs (ElseIf ifst) = ifToJs ifst
167+ elseToJs (ElseIf elif) = ifToJs elif
171168statementToJs m e (Return value) = JSReturn (valueToJs m e value)
src/Language/PureScript/Operators.hs+2−4
@@ -22,7 +22,6 @@ import Language.PureScript.Names
2222import Language.PureScript.Declarations
2323import Language.PureScript.Values
2424
25−import qualified Data.Data as D
2625import Data.Function (on)
2726import Data.List (groupBy, sortBy)
2827import qualified Data.Map as M
@@ -62,10 +61,10 @@ matchOperators ops val = G.everywhereM' (G.mkM parseChains) val
6261 where
6362 parseChains :: Value -> Either String Value
6463 parseChains b@(BinaryNoParens _ _ _) = bracketChain (extendChain b)
65− parseChains val = return val
64+ parseChains other = return other
6665 extendChain :: Value -> Chain
6766 extendChain (BinaryNoParens name l r) = Left l : Right name : extendChain r
68− extendChain val = [Left val]
67+ extendChain other = [Left other]
6968 bracketChain :: Chain -> Either String Value
7069 bracketChain = either (Left . show) Right . P.parse (P.buildExpressionParser opTable parseValue <* P.eof) "operator expression"
7170 opTable = map (map (\(name, f, a) -> P.Infix (P.try (matchOp name) >> return f) (toAssoc a))) ops
@@ -113,7 +112,6 @@ builtIns = [ (globalOp "<", Binary LessThan, 3, Infixl)
113112 , (globalOp "/", Binary Divide, 5, Infixl)
114113 , (globalOp "%", Binary Modulus, 5, Infixl)
115114 , (globalOp "++", Binary Concat, 6, Infixr)
116− , (globalOp ":", Binary Cons, 6, Infixr)
117115 , (globalOp "+", Binary Add, 7, Infixl)
118116 , (globalOp "-", Binary Subtract, 7, Infixl)
119117 , (globalOp "<<", Binary ShiftLeft, 8, Infixl)
src/Language/PureScript/Optimize.hs+1−1
@@ -29,7 +29,7 @@ replaceIdent :: (Data d) => Ident -> JS -> d -> d
2929replaceIdent var1 js = everywhere (mkT replace)
3030 where
3131 replace (JSVar var2) | var1 == var2 = js
32− replace js = js
32+ replace other = other
3333
3434isReassigned :: (Data d) => Ident -> d -> Bool
3535isReassigned var1 = everything (||) (mkQ False check)
src/Language/PureScript/Parser/Common.hs+2−2
@@ -74,7 +74,7 @@ reservedNames = [ "case"
7474
7575builtInOperators :: [String]
7676builtInOperators = [ "~", "-", "<=", ">=", "<", ">", "*", "/", "%", "++", "+", "<<", ">>>", ">>"
77− , "==", "!=", "&&", "||", "&", "^", "|", "!!", "!", ":" ]
77+ , "==", "!=", "&&", "||", "&", "^", "|", "!!", "!" ]
7878
7979reservedOpNames :: [String]
8080reservedOpNames = builtInOperators ++ [ "->" ]
@@ -89,7 +89,7 @@ identLetter :: P.Parsec String u Char
8989identLetter = P.alphaNum <|> P.oneOf "_'"
9090
9191opStart :: P.Parsec String u Char
92−opStart = P.oneOf "!#$%&*+/<=>?@^|~:"
92+opStart = P.oneOf "!#$%&*+/<=>?@^|~"
9393
9494opLetter :: P.Parsec String u Char
9595opLetter = P.oneOf ":#$%&*+./<=>?@^|"
src/Language/PureScript/Parser/Declarations.hs−10
@@ -17,20 +17,10 @@ module Language.PureScript.Parser.Declarations (
1717 parseDeclarations
1818) where
1919
20−import Data.Char
21−import Data.List
22−import Data.Maybe
23−import Data.Function
2420import Control.Applicative
25−import Control.Arrow (Arrow(..))
26−import Control.Monad.State
27−import qualified Data.Map as M
2821import qualified Text.Parsec as P
29−import qualified Text.Parsec.Pos as P
3022
3123import Language.PureScript.Names
32−import Language.PureScript.Values
33−import Language.PureScript.Types
3424import Language.PureScript.Parser.State
3525import Language.PureScript.Parser.Common
3626import Language.PureScript.Declarations
src/Language/PureScript/Parser/State.hs−4
@@ -14,11 +14,7 @@
1414
1515module Language.PureScript.Parser.State where
1616
17−import Language.PureScript.Names
18−import Language.PureScript.Declarations
19−
2017import qualified Text.Parsec as P
21−import qualified Data.Map as M
2218
2319data ParseState = ParseState
2420 { indentationLevel :: P.Column } deriving Show
src/Language/PureScript/Parser/Values.hs+2−15
@@ -18,21 +18,12 @@ module Language.PureScript.Parser.Values (
1818) where
1919
2020import Language.PureScript.Values
21−import Language.PureScript.Names
22−import Language.PureScript.Declarations
2321import Language.PureScript.Parser.State
24−import Data.Function (on)
25−import Data.List
26−import Data.Functor.Identity
27−import qualified Data.Map as M
2822import qualified Language.PureScript.Parser.Common as C
2923import Control.Applicative
3024import qualified Text.Parsec as P
3125import Text.Parsec.Expr
32−import Control.Monad
33−import Control.Arrow (Arrow(..))
3426import Language.PureScript.Parser.Types
35−import Language.PureScript.Types
3627
3728booleanLiteral :: P.Parsec String ParseState Bool
3829booleanLiteral = (C.reserved "true" >> return True) P.<|> (C.reserved "false" >> return False)
@@ -74,10 +65,6 @@ parseAbs = do
7465 toFunction [] value = Abs [] value
7566 toFunction args value = foldr (($)) value args
7667
77−parseApp :: P.Parsec String ParseState Value
78−parseApp = App <$> parseValue
79− <*> (C.indented *> C.parens (C.commaSep parseValue))
80−
8168parseVar :: P.Parsec String ParseState Value
8269parseVar = Var <$> C.parseQualified C.parseIdent
8370
@@ -172,12 +159,12 @@ parseWhile = While <$> (C.reserved "while" *> C.indented *> parseValue <* C.inde
172159parseFor :: P.Parsec String ParseState Statement
173160parseFor = For <$> (C.reserved "for" *> C.indented *> C.parseIdent)
174161 <*> (C.indented *> C.lexeme (P.string "<-") *> parseValue)
175− <*> (C.indented *> C.reserved "until" *> parseValue <* C.colon)
162+ <*> (C.indented *> C.reserved "until" *> parseValue <* C.indented <* C.colon)
176163 <*> parseManyStatements
177164
178165parseForEach :: P.Parsec String ParseState Statement
179166parseForEach = ForEach <$> (C.reserved "foreach" *> C.indented *> C.parseIdent)
180− <*> (C.indented *> C.reserved "in" *> parseValue <* C.colon)
167+ <*> (C.indented *> C.reserved "in" *> parseValue <* C.indented <* C.colon)
181168 <*> parseManyStatements
182169
183170parseIf :: P.Parsec String ParseState Statement
src/Language/PureScript/Pretty/Common.hs+6−13
@@ -17,20 +17,13 @@
1717module Language.PureScript.Pretty.Common where
1818
1919import Data.Char
20−import Data.Maybe (fromMaybe)
21−import Data.List (nub, intersperse, intercalate)
22−import Data.Function (fix)
2320import Control.Monad.State
24−import Control.Applicative (Applicative(..), Alternative(..))
2521import qualified Control.Category as C
2622import Control.Category ((>>>))
2723import qualified Control.Arrow as A
2824import Control.Arrow ((***), (<+>))
2925
3026import Language.PureScript.Names
31−import Language.PureScript.Values
32−import Language.PureScript.Types
33−import Language.PureScript.Declarations
3427
3528identToJs :: Ident -> String
3629identToJs (Ident name) = name
@@ -57,16 +50,16 @@ parens :: String -> String
5750parens s = ('(':s) ++ ")"
5851
5952chainl :: Pattern u a (a, a) -> (r -> r -> r) -> Pattern u a r -> Pattern u a r
60−chainl split f p = fix $ \c -> split >>> ((c <+> p) *** p) >>> A.arr (uncurry f)
53+chainl g f p = fix $ \c -> g >>> ((c <+> p) *** p) >>> A.arr (uncurry f)
6154
6255chainr :: Pattern u a (a, a) -> (r -> r -> r) -> Pattern u a r -> Pattern u a r
63−chainr split f p = fix $ \c -> split >>> (p *** (c <+> p)) >>> A.arr (uncurry f)
56+chainr g f p = fix $ \c -> g >>> (p *** (c <+> p)) >>> A.arr (uncurry f)
6457
6558wrap :: Pattern u a (s, a) -> (s -> r -> r) -> Pattern u a r -> Pattern u a r
66−wrap split f p = fix $ \c -> split >>> (C.id *** (c <+> p)) >>> A.arr (uncurry f)
59+wrap g f p = fix $ \c -> g >>> (C.id *** (c <+> p)) >>> A.arr (uncurry f)
6760
68−split :: Pattern u a (s, t) -> (s -> t -> r) -> Pattern u a r -> Pattern u a r
69−split s f p = s >>> A.arr (uncurry f)
61+split :: Pattern u a (s, t) -> (s -> t -> r) -> Pattern u a r
62+split s f = s >>> A.arr (uncurry f)
7063
7164data OperatorTable u a r = OperatorTable { runOperatorTable :: [ [Operator u a r] ] }
7265
@@ -82,5 +75,5 @@ buildPrettyPrinter table p = foldl (\p' ops -> foldl1 (<+>) (flip map ops $ \op
8275 AssocL pat g -> chainl pat g p'
8376 AssocR pat g -> chainr pat g p'
8477 Wrap pat g -> wrap pat g p'
85− Split pat g -> split pat g p'
78+ Split pat g -> split pat g
8679 ) <+> p') p $ runOperatorTable table
src/Language/PureScript/Pretty/JS.hs+15−16
@@ -24,7 +24,7 @@ import Language.PureScript.CodeGen.JS.AST
2424import Data.List
2525import Data.Maybe (fromMaybe)
2626import qualified Control.Arrow as A
27−import Control.Arrow ((***), (<+>), first, second)
27+import Control.Arrow ((<+>))
2828import Control.Applicative
2929import Control.Monad.State
3030
@@ -34,11 +34,10 @@ blockIndent :: Int
3434blockIndent = 4
3535
3636withIndent :: StateT PrinterState Maybe String -> StateT PrinterState Maybe String
37−withIndent s = do
38− current <- get
39− modify $ \s -> s { indent = indent s + blockIndent }
40− result <- s
41− modify $ \s -> s { indent = indent s - blockIndent }
37+withIndent action = do
38+ modify $ \st -> st { indent = indent st + blockIndent }
39+ result <- action
40+ modify $ \st -> st { indent = indent st - blockIndent }
4241 return result
4342
4443currentIndent :: StateT PrinterState Maybe String
@@ -158,22 +157,22 @@ app = mkPattern' match
158157 match _ = mzero
159158
160159unary :: UnaryOperator -> String -> Operator PrinterState JS String
161−unary op str = Wrap pattern (++)
160+unary op str = Wrap match (++)
162161 where
163− pattern :: Pattern PrinterState JS (String, JS)
164− pattern = mkPattern match
162+ match :: Pattern PrinterState JS (String, JS)
163+ match = mkPattern match'
165164 where
166− match (JSUnary op' val) | op' == op = Just (str, val)
167− match _ = Nothing
165+ match' (JSUnary op' val) | op' == op = Just (str, val)
166+ match' _ = Nothing
168167
169168binary :: BinaryOperator -> String -> Operator PrinterState JS String
170−binary op str = AssocR pattern (\v1 v2 -> v1 ++ " " ++ str ++ " " ++ v2)
169+binary op str = AssocR match (\v1 v2 -> v1 ++ " " ++ str ++ " " ++ v2)
171170 where
172− pattern :: Pattern PrinterState JS (JS, JS)
173− pattern = mkPattern match
171+ match :: Pattern PrinterState JS (JS, JS)
172+ match = mkPattern match'
174173 where
175− match (JSBinary op' v1 v2) | op' == op = Just (v1, v2)
176− match _ = Nothing
174+ match' (JSBinary op' v1 v2) | op' == op = Just (v1, v2)
175+ match' _ = Nothing
177176
178177prettyPrintJS1 :: JS -> String
179178prettyPrintJS1 = fromMaybe (error "Incomplete pattern") . flip evalStateT (PrinterState 0) . prettyPrintJS'
src/Language/PureScript/Pretty/Kinds.hs+1−5
@@ -17,15 +17,11 @@ module Language.PureScript.Pretty.Kinds (
1717) where
1818
1919import Data.Maybe (fromMaybe)
20−import Data.List (intersperse, intercalate)
21−import qualified Control.Arrow as A
22−import Control.Arrow ((<+>))
23−import qualified Data.Map as M
24−import Control.Applicative
2520
2621import Language.PureScript.Kinds
2722import Language.PureScript.Pretty.Common
2823import Language.PureScript.Unknown
24+import Control.Arrow (ArrowPlus(..))
2925
3026typeLiterals :: Pattern () Kind String
3127typeLiterals = mkPattern match
src/Language/PureScript/Pretty/Types.hs+3−9
@@ -18,17 +18,10 @@ module Language.PureScript.Pretty.Types (
1818) where
1919
2020import Data.Maybe (fromMaybe)
21−import Data.List (intersperse, intercalate)
22−import qualified Control.Arrow as A
21+import Data.List (intercalate)
2322import Control.Arrow ((<+>))
24−import qualified Data.Map as M
25−import Control.Applicative
2623
27−import Language.PureScript.Values
2824import Language.PureScript.Types
29−import Language.PureScript.Names
30−import Language.PureScript.Declarations
31−import Language.PureScript.TypeChecker.Monad
3225import Language.PureScript.Pretty.Common
3326import Language.PureScript.Unknown
3427
@@ -49,7 +42,7 @@ typeLiterals = mkPattern match
4942 match _ = Nothing
5043
5144prettyPrintRow :: Row -> String
52−prettyPrintRow = (\(tys, tail) -> intercalate ", " (map (uncurry nameAndTypeToPs) tys) ++ tailToPs tail) . toList []
45+prettyPrintRow = (\(tys, rest) -> intercalate ", " (map (uncurry nameAndTypeToPs) tys) ++ tailToPs rest) . toList []
5346 where
5447 nameAndTypeToPs :: String -> Type -> String
5548 nameAndTypeToPs name ty = name ++ " :: " ++ prettyPrintType ty
@@ -58,6 +51,7 @@ prettyPrintRow = (\(tys, tail) -> intercalate ", " (map (uncurry nameAndTypeToPs
5851 tailToPs (RUnknown (Unknown u)) = " | u" ++ show u
5952 tailToPs (RowVar var) = " | " ++ var
6053 tailToPs (RSkolem s) = " | s" ++ show s
54+ tailToPs _ = error "Invalid row tail"
6155 toList :: [(String, Type)] -> Row -> ([(String, Type)], Row)
6256 toList tys (RCons name ty row) = toList ((name, ty):tys) row
6357 toList tys r = (tys, r)
src/Language/PureScript/Pretty/Values.hs+10−15
@@ -17,16 +17,12 @@ module Language.PureScript.Pretty.Values (
1717 prettyPrintBinder
1818) where
1919
20−import Data.Char
2120import Data.Maybe (fromMaybe)
2221import Data.List (intercalate)
23−import qualified Control.Arrow as A
2422import Control.Arrow ((<+>))
25−import Control.Applicative
2623
2724import Language.PureScript.Types
2825import Language.PureScript.Values
29−import Language.PureScript.Names
3026import Language.PureScript.Pretty.Common
3127import Language.PureScript.Pretty.Types
3228
@@ -91,22 +87,22 @@ typed = mkPattern match
9187 match _ = Nothing
9288
9389unary :: UnaryOperator -> String -> Operator () Value String
94−unary op str = Wrap pattern (++)
90+unary op str = Wrap match (++)
9591 where
96− pattern :: Pattern () Value (String, Value)
97− pattern = mkPattern match
92+ match :: Pattern () Value (String, Value)
93+ match = mkPattern match'
9894 where
99− match (Unary op' val) | op' == op = Just (str, val)
100− match _ = Nothing
95+ match' (Unary op' val) | op' == op = Just (str, val)
96+ match' _ = Nothing
10197
10298binary :: BinaryOperator -> String -> Operator () Value String
103−binary op str = AssocR pattern (\v1 v2 -> v1 ++ " " ++ str ++ " " ++ v2)
99+binary op str = AssocR match (\v1 v2 -> v1 ++ " " ++ str ++ " " ++ v2)
104100 where
105− pattern :: Pattern () Value (Value, Value)
106− pattern = mkPattern match
101+ match :: Pattern () Value (Value, Value)
102+ match = mkPattern match'
107103 where
108− match (Binary op' v1 v2) | op' == op = Just (v1, v2)
109− match _ = Nothing
104+ match' (Binary op' v1 v2) | op' == op = Just (v1, v2)
105+ match' _ = Nothing
110106
111107prettyPrintValue :: Value -> String
112108prettyPrintValue = fromMaybe (error "Incomplete pattern") . pattern matchValue ()
@@ -133,7 +129,6 @@ prettyPrintValue = fromMaybe (error "Incomplete pattern") . pattern matchValue (
133129 , [ binary Divide "/" ]
134130 , [ binary Modulus "%" ]
135131 , [ binary Concat "++" ]
136− , [ binary Cons ":" ]
137132 , [ binary Add "+" ]
138133 , [ binary Subtract "-" ]
139134 , [ binary ShiftLeft "<<" ]
src/Language/PureScript/TypeChecker.hs+5−8
@@ -24,9 +24,7 @@ import Language.PureScript.TypeChecker.Kinds as T
2424import Language.PureScript.TypeChecker.Types as T
2525import Language.PureScript.TypeChecker.Synonyms as T
2626
27−import Data.List
2827import Data.Maybe
29−import Data.Function
3028import qualified Data.Map as M
3129
3230import Language.PureScript.Values
@@ -35,7 +33,6 @@ import Language.PureScript.Names
3533import Language.PureScript.Kinds
3634import Language.PureScript.Declarations
3735
38−import Control.Monad (forM_)
3936import Control.Monad.State
4037import Control.Monad.Error
4138
@@ -74,7 +71,7 @@ typeCheckAll (ValueDeclaration name val : rest) = do
7471 env <- getEnv
7572 modulePath <- checkModulePath `fmap` get
7673 case M.lookup (modulePath, name) (names env) of
77− Just ty -> throwError $ show name ++ " is already defined"
74+ Just _ -> throwError $ show name ++ " is already defined"
7875 Nothing -> do
7976 ty <- typeOf (Just name) val
8077 putEnv (env { names = M.insert (modulePath, name) (ty, Value) (names env) })
@@ -101,7 +98,7 @@ typeCheckAll (ExternMemberDeclaration member name ty : rest) = do
10198 typeCheckAll rest
10299 where
103100 isSingleArgumentFunction (Function [_] _) = True
104− isSingleArgumentFunction (ForAll _ ty) = isSingleArgumentFunction ty
101+ isSingleArgumentFunction (ForAll _ t) = isSingleArgumentFunction t
105102 isSingleArgumentFunction _ = False
106103typeCheckAll (ExternDeclaration name ty : rest) = do
107104 rethrow (("Error in foreign import declaration " ++ show name ++ ":\n") ++) $ do
@@ -128,13 +125,13 @@ typeCheckAll (ImportDeclaration modulePath idents : rest) = do
128125 guardWith ("Module " ++ show modulePath ++ " does not exist") $ moduleExists env
129126 case idents of
130127 Nothing -> bindIdents (map snd $ filterModule env) currentModule env
131− Just idents -> bindIdents idents currentModule env
128+ Just idents' -> bindIdents idents' currentModule env
132129 typeCheckAll rest
133130 where errorMessage = (("Error in import declaration " ++ show modulePath ++ ":\n") ++)
134131 filterModule = filter ((== modulePath) . fst) . M.keys . names
135132 moduleExists env = not $ null $ filterModule env
136− bindIdents idents currentModule env =
137− forM_ idents $ \ident -> do
133+ bindIdents idents' currentModule env =
134+ forM_ idents' $ \ident -> do
138135 guardWith (show currentModule ++ "." ++ show ident ++ " is already defined") $ (currentModule, ident) `M.notMember` names env
139136 case (modulePath, ident) `M.lookup` names env of
140137 Just (pt, _) -> modifyEnv (\e -> e { names = M.insert (currentModule, ident) (pt, Alias modulePath ident) (names e) })
src/Language/PureScript/TypeChecker/Kinds.hs+7−14
@@ -19,15 +19,9 @@ module Language.PureScript.TypeChecker.Kinds (
1919 kindOf
2020) where
2121
22−import Data.List
23−import Data.Maybe (fromMaybe)
24−import Data.Function
25−import Data.Data
26−
2722import Language.PureScript.Types
2823import Language.PureScript.Kinds
2924import Language.PureScript.Names
30−import Language.PureScript.Declarations
3125import Language.PureScript.TypeChecker.Monad
3226import Language.PureScript.Pretty
3327import Language.PureScript.Unknown
@@ -36,8 +30,6 @@ import Control.Monad.State
3630import Control.Monad.Error
3731
3832import Control.Applicative
39−import Control.Arrow (Kleisli(..), (***))
40−import qualified Control.Category as C
4133
4234import qualified Data.Map as M
4335
@@ -94,14 +86,14 @@ infer name m (Function args ret) = do
9486 ks <- inferAll name m args
9587 k <- infer name m ret
9688 k ~~ Star
97− forM ks $ \k -> k ~~ Star
89+ forM ks (~~ Star)
9890 return Star
9991infer _ m (TypeVar v) =
10092 case M.lookup v m of
10193 Just k -> return k
10294 Nothing -> throwError $ "Unbound type variable " ++ v
103−infer (Just (name, k)) m c@(TypeConstructor v@(Qualified (ModulePath []) pn)) | name == pn = return k
104−infer name m (TypeConstructor v) = do
95+infer (Just (name, k)) _ (TypeConstructor (Qualified (ModulePath []) pn)) | name == pn = return k
96+infer _ _ (TypeConstructor v) = do
10597 env <- liftCheck getEnv
10698 modulePath <- checkModulePath `fmap` get
10799 case M.lookup (qualify modulePath v) (types env) of
@@ -116,17 +108,18 @@ infer name m (TypeApp t1 t2) = do
116108infer name m (ForAll ident ty) = do
117109 k <- fresh
118110 infer name (M.insert ident k m) ty
119−infer _ m t = return Star
111+infer _ _ _ = return Star
120112
121113inferRow :: Maybe (ProperName, Kind) -> M.Map String Kind -> Row -> Subst Kind
122114inferRow _ m (RowVar v) = do
123115 case M.lookup v m of
124116 Just k -> return k
125117 Nothing -> throwError $ "Unbound row variable " ++ v
126−inferRow _ m r@REmpty = return Row
127−inferRow name m r@(RCons _ ty row) = do
118+inferRow _ _ REmpty = return Row
119+inferRow name m (RCons _ ty row) = do
128120 k1 <- infer name m ty
129121 k2 <- inferRow name m row
130122 k1 ~~ Star
131123 k2 ~~ Row
132124 return Row
125+inferRow _ _ _ = error "Invalid row in inferRow"
src/Language/PureScript/TypeChecker/Monad.hs−3
@@ -25,13 +25,10 @@ import Language.PureScript.Unknown
2525import Data.Data
2626import Data.Maybe
2727import Data.Monoid
28−import Data.Typeable
2928import Control.Applicative
3029import Control.Monad.State
3130import Control.Monad.Error
3231
33−import Control.Arrow ((***), first, second)
34−
3532import qualified Data.Map as M
3633
3734data NameKind = Value | Extern | Alias ModulePath Ident | LocalVariable deriving Show
src/Language/PureScript/TypeChecker/Synonyms.hs+3−6
@@ -18,25 +18,22 @@ module Language.PureScript.TypeChecker.Synonyms (
1818) where
1919
2020import Language.PureScript.Types
21−import Language.PureScript.Declarations
2221import Language.PureScript.Names
2322
2423import Data.Maybe (fromMaybe)
2524import Data.Data
2625import Data.Generics
2726import Data.Generics.Extras
28−import Control.Arrow
2927import Control.Monad.Writer
3028import Control.Monad.Error
31−import qualified Data.Map as M
3229
3330buildTypeSubstitution :: Qualified ProperName -> Int -> Type -> Either String (Maybe Type)
3431buildTypeSubstitution name n = go n []
3532 where
3633 go :: Int -> [Type] -> Type -> Either String (Maybe Type)
3734 go 0 args (TypeConstructor ctor) | name == ctor = return (Just $ SaturatedTypeSynonym ctor args)
38− go n _ (TypeConstructor ctor) | n > 0 && name == ctor = throwError $ "Partially applied type synonym " ++ show name
39− go n args (TypeApp f arg) = go (n - 1) (arg:args) f
35+ go m _ (TypeConstructor ctor) | m > 0 && name == ctor = throwError $ "Partially applied type synonym " ++ show name
36+ go m args (TypeApp f arg) = go (m - 1) (arg:args) f
4037 go _ _ _ = return Nothing
4138
4239saturateTypeSynonym :: (Data d) => Qualified ProperName -> Int -> d -> Either String d
@@ -45,7 +42,7 @@ saturateTypeSynonym name n = everywhereM' (mkM replace)
4542 replace t = fmap (fromMaybe t) $ buildTypeSubstitution name n t
4643
4744saturateAllTypeSynonyms :: (Data d) => [(Qualified ProperName, Int)] -> d -> Either String d
48−saturateAllTypeSynonyms syns d = foldM (\d (name, n) -> saturateTypeSynonym name n d) d syns
45+saturateAllTypeSynonyms syns d = foldM (\result (name, n) -> saturateTypeSynonym name n result) d syns
4946
5047
5148
src/Language/PureScript/TypeChecker/Types.hs+39−44
@@ -19,12 +19,10 @@ module Language.PureScript.TypeChecker.Types (
1919) where
2020
2121import Data.List
22−import Data.Maybe (isJust, fromMaybe)
23−import Data.Function
22+import Data.Maybe (fromMaybe)
2423import qualified Data.Data as D
2524import Data.Generics
26− (extT, something, everywhere, everywhereM, everything,
27− everywhereBut, mkT, mkM, mkQ, extM, extQ)
25+ (mkT, something, everywhere, everywhereBut, mkQ, extQ)
2826
2927import Language.PureScript.Values
3028import Language.PureScript.Types
@@ -40,8 +38,7 @@ import Control.Monad.State
4038import Control.Monad.Error
4139
4240import Control.Applicative
43−import Control.Arrow (Arrow(..), Kleisli(..), (***), (&&&), second)
44−import qualified Control.Category as C
41+import Control.Arrow (Arrow(..))
4542
4643import qualified Data.Map as M
4744
@@ -60,7 +57,7 @@ instance Unifiable Type where
6057 apply _ t = t
6158 unknowns (TUnknown (Unknown u)) = [u]
6259 unknowns (SaturatedTypeSynonym _ tys) = concatMap unknowns tys
63− unknowns (ForAll idents ty) = unknowns ty
60+ unknowns (ForAll _ ty) = unknowns ty
6461 unknowns (Array t) = unknowns t
6562 unknowns (Object r) = unknowns r
6663 unknowns (Function args ret) = concatMap unknowns args ++ unknowns ret
@@ -85,16 +82,16 @@ instance Unifiable Row where
8582 unifyRows :: [(String, Type)] -> Row -> [(String, Type)] -> Row -> Subst ()
8683 unifyRows [] (RUnknown u) sd r = replace u (rowFromList (sd, r))
8784 unifyRows sd r [] (RUnknown u) = replace u (rowFromList (sd, r))
88− unifyRows ns@((name, ty):row) r others u@(RUnknown un) = do
85+ unifyRows ((name, ty):row) r others u@(RUnknown un) = do
8986 occursCheck un ty
90− forM row $ \(_, ty) -> occursCheck un ty
87+ forM row $ \(_, t) -> occursCheck un t
9188 u' <- fresh
9289 u ~~ RCons name ty u'
9390 unifyRows row r others u'
9491 unifyRows [] REmpty [] REmpty = return ()
9592 unifyRows [] (RowVar v1) [] (RowVar v2) | v1 == v2 = return ()
9693 unifyRows [] (RSkolem s1) [] (RSkolem s2) | s1 == s2 = return ()
97− unifyRows sd1 r1 sd2 r2 = throwError $ "Cannot unify " ++ prettyPrintRow (rowFromList (sd1, r1)) ++ " with " ++ prettyPrintRow (rowFromList (sd2, r2)) ++ "."
94+ unifyRows sd3 r3 sd4 r4 = throwError $ "Cannot unify " ++ prettyPrintRow (rowFromList (sd3, r3)) ++ " with " ++ prettyPrintRow (rowFromList (sd4, r4)) ++ "."
9895 apply s (RUnknown u) = runSubstitution s u
9996 apply s (RCons name ty r) = RCons name (apply s ty) (apply s r)
10097 apply _ r = r
@@ -136,11 +133,11 @@ unifyTypes t1 t2 = rethrow (\e -> "Error unifying type " ++ prettyPrintType t1 +
136133 unifyTypes' (TypeConstructor c1) (TypeConstructor c2) = do
137134 modulePath <- checkModulePath `fmap` get
138135 guardWith ("Cannot unify " ++ show c1 ++ " with " ++ show c2 ++ ".") (qualify modulePath c1 == qualify modulePath c2)
139− unifyTypes' (TypeApp t1 t2) (TypeApp t3 t4) = do
140− t1 `unifyTypes` t3
141− t2 `unifyTypes` t4
136+ unifyTypes' (TypeApp t3 t4) (TypeApp t5 t6) = do
137+ t3 `unifyTypes` t5
138+ t4 `unifyTypes` t6
142139 unifyTypes' (Skolem s1) (Skolem s2) | s1 == s2 = return ()
143− unifyTypes' t1 t2 = throwError $ "Cannot unify " ++ prettyPrintType t1 ++ " with " ++ prettyPrintType t2 ++ "."
140+ unifyTypes' t3 t4 = throwError $ "Cannot unify " ++ prettyPrintType t3 ++ " with " ++ prettyPrintType t4 ++ "."
144141
145142isFunction :: Value -> Bool
146143isFunction (Abs _ _) = True
@@ -152,12 +149,12 @@ typeOf name val = do
152149 (ty, sub, checks) <- runSubst $ case name of
153150 Just ident | isFunction val ->
154151 case val of
155− TypedValue val ty -> do
152+ TypedValue value ty -> do
156153 kind <- liftCheck $ kindOf ty
157154 guardWith ("Expected type of kind *, was " ++ prettyPrintKind kind) $ kind == Star
158155 ty' <- replaceAllTypeSynonyms ty
159156 modulePath <- checkModulePath <$> get
160− bindNames (M.singleton (modulePath, ident) (ty, LocalVariable)) $ check val ty'
157+ bindNames (M.singleton (modulePath, ident) (ty, LocalVariable)) $ check value ty'
161158 return ty'
162159 _ -> do
163160 me <- fresh
@@ -175,7 +172,7 @@ escapeCheck checks ty sub =
175172 let
176173 visibleUnknowns = nub $ unknowns ty
177174 in
178− forM_ checks $ \check -> case check of
175+ forM_ checks $ \c -> case c of
179176 AnyUnifiable t -> do
180177 let unsolvedUnknowns = nub . unknowns $ apply sub t
181178 guardWith "Escape check fails" $ null $ unsolvedUnknowns \\ visibleUnknowns
@@ -214,18 +211,18 @@ replaceAllTypeVars :: (D.Data d) => [(String, Type)] -> d -> d
214211replaceAllTypeVars = foldl' (\f (name, ty) -> replaceTypeVars name ty . f) id
215212
216213replaceTypeVars :: (D.Data d) => String -> Type -> d -> d
217−replaceTypeVars name t = everywhereBut (mkQ False isShadowed) (mkT replace)
214+replaceTypeVars name t = everywhereBut (mkQ False isShadowed) (mkT replaceTypeVar)
218215 where
219− replace (TypeVar v) | v == name = t
220− replace t = t
216+ replaceTypeVar (TypeVar v) | v == name = t
217+ replaceTypeVar other = other
221218 isShadowed (ForAll v _) | v == name = True
222219 isShadowed _ = False
223220
224221replaceRowVars :: (D.Data d) => String -> Row -> d -> d
225−replaceRowVars name r = everywhere (mkT replace)
222+replaceRowVars name r = everywhere (mkT replaceRowVar)
226223 where
227− replace (RowVar v) | v == name = r
228− replace t = t
224+ replaceRowVar (RowVar v) | v == name = r
225+ replaceRowVar other = other
229226
230227replaceAllVarsWithUnknowns :: Type -> Subst Type
231228replaceAllVarsWithUnknowns (ForAll ident ty) = replaceVarWithUnknown ident ty >>= replaceAllVarsWithUnknowns
@@ -244,14 +241,10 @@ replaceAllTypeSynonyms d = do
244241 either throwError return $ saturateAllTypeSynonyms syns d
245242
246243desaturateAllTypeSynonyms :: (D.Data d) => d -> d
247−desaturateAllTypeSynonyms = everywhere (mkT replace)
244+desaturateAllTypeSynonyms = everywhere (mkT replaceSaturatedTypeSynonym)
248245 where
249− replace (SaturatedTypeSynonym name args) = foldl TypeApp (TypeConstructor name) args
250− replace t = t
251−
252−expandAllTypeSynonyms :: Type -> Subst Type
253−expandAllTypeSynonyms (SaturatedTypeSynonym name args) = expandTypeSynonym name args >>= expandAllTypeSynonyms
254−expandAllTypeSynonyms ty = return ty
246+ replaceSaturatedTypeSynonym (SaturatedTypeSynonym name args) = foldl TypeApp (TypeConstructor name) args
247+ replaceSaturatedTypeSynonym t = t
255248
256249expandTypeSynonym :: Qualified ProperName -> [Type] -> Subst Type
257250expandTypeSynonym name args = do
@@ -276,9 +269,9 @@ infer' (StringLiteral _) = return String
276269infer' (BooleanLiteral _) = return Boolean
277270infer' (ArrayLiteral vals) = do
278271 ts <- mapM (infer) vals
279− arr <- fresh
280− forM_ ts $ \t -> arr ~~ Array t
281− return arr
272+ els <- fresh
273+ forM_ ts $ \t -> els ~~ Array t
274+ return els
282275infer' (Unary op val) = do
283276 t <- infer val
284277 inferUnary op t
@@ -324,7 +317,7 @@ infer' app@(App _ _) = do
324317 ret <- fresh
325318 checkFunctionApplications ft argss ret
326319 return ret
327−infer' (Var var@(Qualified mp name)) = do
320+infer' (Var var) = do
328321 ty <- lookupVariable var
329322 replaceAllTypeSynonyms ty
330323infer' (Block ss) = do
@@ -355,6 +348,7 @@ infer' (TypedValue val ty) = do
355348 ty' <- replaceAllTypeSynonyms ty
356349 check val ty'
357350 return ty'
351+infer' _ = error "Invalid argument to infer"
358352
359353inferProperty :: Type -> String -> Subst (Maybe Type)
360354inferProperty (Object row) prop = do
@@ -366,7 +360,7 @@ inferProperty (SaturatedTypeSynonym name args) prop = do
366360inferProperty (ForAll ident ty) prop = do
367361 replaced <- replaceVarWithUnknown ident ty
368362 inferProperty replaced prop
369−inferProperty _ prop = return Nothing
363+inferProperty _ _ = return Nothing
370364
371365inferUnary :: UnaryOperator -> Type -> Subst Type
372366inferUnary op val =
@@ -487,6 +481,7 @@ inferBinder val (ArrayBinder binders rest) = do
487481inferBinder val (NamedBinder name binder) = do
488482 m <- inferBinder val binder
489483 return $ M.insert name val m
484+inferBinder _ _ = error "Invalid argument to inferBinder"
490485
491486inferGuardedBinder :: Type -> Binder -> Subst (M.Map Ident Type)
492487inferGuardedBinder val (GuardedBinder cond binder) = do
@@ -511,11 +506,11 @@ assignVariable name = do
511506 _ -> return ()
512507
513508checkStatement :: M.Map Ident Type -> Type -> Statement -> Subst (Bool, M.Map Ident Type)
514−checkStatement mass ret (VariableIntroduction name val) = do
509+checkStatement mass _ (VariableIntroduction name val) = do
515510 assignVariable name
516511 t <- infer val
517512 return (False, M.insert name t mass)
518−checkStatement mass ret (Assignment ident val) = do
513+checkStatement mass _ (Assignment ident val) = do
519514 t <- infer val
520515 case M.lookup ident mass of
521516 Nothing -> throwError $ "No local variable with name " ++ show ident
@@ -567,7 +562,7 @@ checkBlock mass ret (s:ss) = do
567562 bindLocalVariables (M.toList mass1) $ case (b1, ss) of
568563 (True, []) -> return (True, mass1)
569564 (True, _) -> throwError "Unreachable code"
570− (False, ss) -> checkBlock mass1 ret ss
565+ (False, ss') -> checkBlock mass1 ret ss'
571566
572567skolemize :: String -> Type -> Subst Type
573568skolemize ident ty = do
@@ -609,7 +604,7 @@ check' app@(App _ _) ret = do
609604 let (f, argss) = unfoldApplication app
610605 ft <- infer f
611606 checkFunctionApplications ft argss ret
612−check' v@(Var var@(Qualified mp name)) ty = do
607+check' (Var var) ty = do
613608 ty1 <- lookupVariable var
614609 repl <- replaceAllTypeSynonyms ty1
615610 repl `subsumes` ty
@@ -663,21 +658,21 @@ checkProperties ps row lax = let (ts, r') = rowToList row in go ps ts r' where
663658 go [] ((p, _): _) _ | lax = return ()
664659 | otherwise = throwError $ prettyPrintValue (ObjectLiteral ps) ++ " does not have property " ++ p
665660 go ((p,_):_) [] REmpty = throwError $ "Property " ++ p ++ " is not present in closed object type " ++ prettyPrintRow row
666− go ((p,v):ps) [] u@(RUnknown _) = do
661+ go ((p,v):ps') [] u@(RUnknown _) = do
667662 ty <- infer v
668663 rest <- fresh
669664 u ~~ RCons p ty rest
670− go ps [] rest
671− go ((p,v):ps) ts r =
665+ go ps' [] rest
666+ go ((p,v):ps') ts r =
672667 case lookup p ts of
673668 Nothing -> do
674669 ty <- infer v
675670 rest <- fresh
676671 r ~~ RCons p ty rest
677− go ps ts rest
672+ go ps' ts rest
678673 Just ty -> do
679674 check v ty
680− go ps (delete (p, ty) ts) r
675+ go ps' (delete (p, ty) ts) r
681676 go _ _ _ = throwError $ prettyPrintValue (ObjectLiteral ps) ++ " does not have type " ++ prettyPrintType (Object row)
682677
683678unfoldApplication :: Value -> (Value, [[Value]])
src/Language/PureScript/Types.hs+1−1
@@ -63,7 +63,7 @@ isPolyType (Object ps) = all isPolyType (map snd . fst $ rowToList ps)
6363isPolyType (Function args ret) = all isPolyType args && isPolyType ret
6464isPolyType (TypeApp t1 t2) = isMonoType t1 && isMonoType t2
6565isPolyType (SaturatedTypeSynonym _ args) = all isPolyType args
66−isPolyType (ForAll idents ty) = isPolyType ty
66+isPolyType (ForAll _ ty) = isPolyType ty
6767isPolyType _ = True
6868
6969mkForAll :: [String] -> Type -> Type
src/Language/PureScript/Unknown.hs−1
@@ -17,7 +17,6 @@
1717module Language.PureScript.Unknown where
1818
1919import Data.Data
20−import Data.Typeable
2120
2221newtype Unknown t = Unknown { runUnknown :: Int } deriving (Show, Eq, Ord, Data, Typeable)
2322
src/Language/PureScript/Values.hs+1−2
@@ -46,8 +46,7 @@ data BinaryOperator
4646 | ShiftLeft
4747 | ShiftRight
4848 | ZeroFillShiftRight
49− | Concat
50− | Cons deriving (Show, Eq, Data, Typeable)
49+ | Concat deriving (Show, Eq, Data, Typeable)
5150
5251data Value
5352 = NumericLiteral (Either Integer Double)