@@ -3,6 +3,7 @@ module Constrain where
33
44import Ast
55import Types
6+import Data.List (foldl')
67import qualified Data.Set as Set
78import qualified Data.Map as Map
89import Control.Monad (liftM,mapM)
@@ -60,7 +61,7 @@ inference (If e1 e2 e3) =
6061 , Set.unions [c1,c2,c3, Set.fromList [ t1 :=: BoolT, t2 :=: t3 ] ]
6162 , t2 )
6263
63−inference (Data name es) = inference $ foldl App (Var name) es
64+inference (Data name es) = inference $ foldl' App (Var name) es
6465inference (Binop op e1 e2) = inference (Var op `App` e1 `App` e2)
6566inference (Access (Var x) y) = inference . Var $ x ++ "." ++ y
6667inference (Range e1 e2) = inference (Var "elmRange" `App` e1 `App` e2)
@@ -69,16 +70,8 @@ inference other =
6970 case other of
7071 Number _ -> primitive IntT
7172 Chr _ -> primitive CharT
73+ Str _ -> primitive string
7274 Boolean _ -> primitive BoolT
7375 _ -> beta >>= primitive
7476
7577primitive t = return (Map.empty, Set.empty, t)
76−{--
77− Let x e1 e2 ->
78− do (a1,c1,t1) <- inference e1
79− (a2,c2,t2) <- inference e2
80− let ts = Map.findWithDefault (error "inference") x a
81− return ( unionA a1 $ Map.delete x a2
82− , Set.unions [ c1, c2, Set.fromList $ map (:<: t1) ts ]
83− , t2 )
84−--}