@@ -43,11 +43,11 @@ lineTypes = [ numScheme (\n -> listOf (pairOf n) ==> line) "line"
43 , "customLine" -: listOf int ==> color ==> line ==> form
43 , "customLine" -: listOf int ==> color ==> line ==> form
44 ] ++ hasType (color ==> line ==> form) ["solid","dashed","dotted"]
44 ] ++ hasType (color ==> line ==> form) ["solid","dashed","dotted"]
46−shapes = [ numScheme (\n -> listOf (pairOf n) ==> pairOf n ==> shape) "polygon"
46+shapes = [ twoNums (\n m -> listOf (pairOf n) ==> pairOf m ==> shape) "polygon"
47 , "filled" -: color ==> shape ==> form
47 , "filled" -: color ==> shape ==> form
48 , "outlined" -: color ==> shape ==> form
48 , "outlined" -: color ==> shape ==> form
49 , "customOutline" -: listOf int ==> color ==> shape ==> form
49 , "customOutline" -: listOf int ==> color ==> shape ==> form
50− ] ++ map (numScheme (\n -> n ==> n ==> pairOf n ==> shape)) [ "ngon"
50+ ] ++ map (twoNums (\n m -> n ==> n ==> pairOf m ==> shape)) [ "ngon"
52 , "oval" ]
52 , "oval" ]
@@ -130,6 +130,9 @@ concreteSignals =
130binop t = t ==> t ==> t
130binop t = t ==> t ==> t
131numScheme t name = (name, Forall [0] [VarT 0 :<: number] (t (VarT 0)))
131numScheme t name = (name, Forall [0] [VarT 0 :<: number] (t (VarT 0)))
132timeScheme name t = (name, Forall [0] [VarT 0 :<: time] (t (VarT 0)))
132timeScheme name t = (name, Forall [0] [VarT 0 :<: time] (t (VarT 0)))
134+ (,) name . Forall [0,1] [ VarT 0 :<: number, VarT 1 :<: number ] $
135 map (numScheme (\t -> t ==> binop t)) ["clamp"] ++
138 map (numScheme (\t -> t ==> binop t)) ["clamp"] ++
@@ -137,7 +140,10 @@ math =
137 [ numScheme (\t -> t ==> t) "abs" ] ++
140 [ numScheme (\t -> t ==> t) "abs" ] ++
138 hasType (binop float) [ "/", "logBase" ] ++
141 hasType (binop float) [ "/", "logBase" ] ++
139 hasType (binop int) ["rem","div","mod"] ++
142 hasType (binop int) ["rem","div","mod"] ++
140− hasType (float ==> float) ["sin","cos","tan","asin","acos","atan","sqrt"]
143+ hasType (float ==> float) ["sin","cos","tan","asin","acos","atan","sqrt"] ++
144+ hasType float ["pi","e"] ++
145+ hasType (int ==> float) ["toFloat","castIntToFloat"] ++
146+ hasType (float ==> int) ["round","floor","ceiling","truncate"]
143 [ "not" -: bool ==> bool ] ++
149 [ "not" -: bool ==> bool ] ++
@@ -163,7 +169,7 @@ funcs =
163 , "." -:: (b ==> c) ==> (a ==> b) ==> (a ==> c)
169 , "." -:: (b ==> c) ==> (a ==> b) ==> (a ==> c)
164 , "$" -:: (a ==> b) ==> a ==> b
170 , "$" -:: (a ==> b) ==> a ==> b
165 , ":" -:: a ==> listOf a ==> listOf a
171 , ":" -:: a ==> listOf a ==> listOf a
166− , "++" -:: a ==> a ==> a
172+ , (,) "++" . Forall [0,1] [ VarT 0 :<: appendable (VarT 1) ] $ VarT 0 ==> VarT 0 ==> VarT 0
167 , "Cons" -:: a ==> listOf a ==> listOf a
173 , "Cons" -:: a ==> listOf a ==> listOf a
168 , "Nil" -:: listOf a
174 , "Nil" -:: listOf a
169 , "Just" -:: a ==> maybeOf a
175 , "Just" -:: a ==> maybeOf a
@@ -184,19 +190,22 @@ lists =
184 , "scanl1" -:: (a ==> a ==> a) ==> listOf a ==> a
190 , "scanl1" -:: (a ==> a ==> a) ==> listOf a ==> a
185 , "forall" -:: (a ==> bool) ==> listOf a ==> bool
191 , "forall" -:: (a ==> bool) ==> listOf a ==> bool
186 , "exists" -:: (a ==> bool) ==> listOf a ==> bool
192 , "exists" -:: (a ==> bool) ==> listOf a ==> bool
187− , "concat" -:: listOf (listOf a) ==> listOf a
188 , "reverse" -:: listOf a ==> listOf a
193 , "reverse" -:: listOf a ==> listOf a
189 , "take" -:: int ==> listOf a ==> listOf a
194 , "take" -:: int ==> listOf a ==> listOf a
190 , "drop" -:: int ==> listOf a ==> listOf a
195 , "drop" -:: int ==> listOf a ==> listOf a
191 , "partition" -:: (a ==> bool) ==> listOf a ==> tupleOf [listOf a,listOf a]
196 , "partition" -:: (a ==> bool) ==> listOf a ==> tupleOf [listOf a,listOf a]
192 , "intersperse" -:: a ==> listOf a ==> listOf a
197 , "intersperse" -:: a ==> listOf a ==> listOf a
193− , "intercalate" -:: listOf a ==> listOf(listOf a) ==> listOf a
194 , "zip" -:: listOf a ==>listOf b ==>listOf(tupleOf [a,b])
198 , "zip" -:: listOf a ==>listOf b ==>listOf(tupleOf [a,b])
195 , "map" -:: (a ==> b) ==> listOf a ==> listOf b
199 , "map" -:: (a ==> b) ==> listOf a ==> listOf b
196 , "foldr" -:: (a ==> b ==> b) ==> b ==> listOf a ==> b
200 , "foldr" -:: (a ==> b ==> b) ==> b ==> listOf a ==> b
197 , "foldl" -:: (a ==> b ==> b) ==> b ==> listOf a ==> b
201 , "foldl" -:: (a ==> b ==> b) ==> b ==> listOf a ==> b
198 , "scanl" -:: (a ==> b ==> b) ==> b ==> listOf a ==> listOf b
202 , "scanl" -:: (a ==> b ==> b) ==> b ==> listOf a ==> listOf b
199− , "concatMap" -:: (a ==> listOf b) ==> listOf a ==> listOf b
203+ , (,) "concat" . Forall [0,1] [ VarT 0 :<: appendable (VarT 1) ] $
204+ listOf (VarT 0) ==> VarT 0
205+ , (,) "concatMap" . Forall [0,1,2] [ VarT 0 :<: appendable (VarT 1) ] $
206+ (VarT 2 ==> VarT 0) ==> listOf (VarT 2) ==> VarT 0
207+ , (,) "intercalate" . Forall [0,1] [ VarT 0 :<: appendable (VarT 1) ] $
208+ VarT 0 ==> listOf (VarT 0) ==> VarT 0
200 , "zipWith" -:: (a ==> b ==> c) ==> listOf a ==> listOf b ==> listOf c
209 , "zipWith" -:: (a ==> b ==> c) ==> listOf a ==> listOf b ==> listOf c
201 ] ++ map (numScheme (\n -> listOf n ==> n)) [ "sum", "product"
210 ] ++ map (numScheme (\n -> listOf n ==> n)) [ "sum", "product"
202 , "maximum", "minimum" ]
211 , "maximum", "minimum" ]