@@ -142,6 +142,7 @@ json = prefix "JSON"
143-------- Signals --------
143-------- Signals --------
145+lyft n = sig (n+1) ("lift" ++ show n)
145sig n name = (,) name $ Forall [1..n] [] (fn ts ==> fn (map signalOf ts))
146sig n name = (,) name $ Forall [1..n] [] (fn ts ==> fn (map signalOf ts))
146 where fn = foldr1 (==>)
147 where fn = foldr1 (==>)
147 ts = map VarT [1..n]
148 ts = map VarT [1..n]
@@ -149,19 +150,21 @@ sig n name = (,) name $ Forall [1..n] [] (fn ts ==> fn (map signalOf ts))
149signals = prefix "Signal"
150signals = prefix "Signal"
150 [ sig 1 "constant"
151 [ sig 1 "constant"
151 , sig 2 "lift"
152 , sig 2 "lift"
152− , sig 3 "lift2"
153+ ] ++ map lyft [2..8] ++ [
155− , "foldp" -:: (a ==> b ==> b) ==> b ==> signalOf a ==> signalOf b
154+ "foldp" -:: (a ==> b ==> b) ==> b ==> signalOf a ==> signalOf b
156 , "foldp1" -:: (a ==> a ==> a) ==> signalOf a ==> signalOf a
155 , "foldp1" -:: (a ==> a ==> a) ==> signalOf a ==> signalOf a
157 , "foldp'" -:: (a ==> b ==> b) ==> (a ==> b) ==> signalOf a ==> signalOf b
156 , "foldp'" -:: (a ==> b ==> b) ==> (a ==> b) ==> signalOf a ==> signalOf b
158 , "count" -:: signalOf a ==> signalOf int
157 , "count" -:: signalOf a ==> signalOf int
158+ , "countIf" -:: (a ==> bool) ==> signalOf a ==> signalOf int
159− , "keepIf" -:: (a==>bool) ==> a ==> signalOf a ==> signalOf a
159+ , "keepIf" -:: (a ==> bool) ==> a ==> signalOf a ==> signalOf a
160− , "dropIf" -:: (a==>bool) ==> a ==> signalOf a ==> signalOf a
160+ , "dropIf" -:: (a ==> bool) ==> a ==> signalOf a ==> signalOf a
161 , "keepWhen" -:: signalOf bool ==> a ==> signalOf a ==> signalOf a
161 , "keepWhen" -:: signalOf bool ==> a ==> signalOf a ==> signalOf a
162 , "dropWhen" -:: signalOf bool ==> a ==> signalOf a ==> signalOf a
162 , "dropWhen" -:: signalOf bool ==> a ==> signalOf a ==> signalOf a
163 , "dropRepeats" -:: signalOf a ==> signalOf a
163 , "dropRepeats" -:: signalOf a ==> signalOf a
164 , "sampleOn" -:: signalOf a ==> signalOf b ==> signalOf b
164 , "sampleOn" -:: signalOf a ==> signalOf b ==> signalOf b
165+ , "merge" -:: signalOf a ==> signalOf a ==> signalOf a
166+ , "merges" -:: listOf (signalOf a) ==> signalOf a
167+ , numScheme (\n -> int ==> signalOf n ==> signalOf float) "average"
167http = prefix "HTTP"
170http = prefix "HTTP"
@@ -200,23 +203,21 @@ concreteSignals =
202times = prefix "Time"
205times = prefix "Time"
203− [ "deltas" -: signalOf time ==> signalOf time
204− , "fps" -: number ==> signalOf time
206+ [ "fps" -: number ==> signalOf time
205− , "every" -: time ==> signalOf time
207+ , "every" -: time ==> signalOf time
206− , "fpsWhen" -: signalOf bool ==> number ==> signalOf time
208+ , "fpsWhen" -: number ==> signalOf bool ==> signalOf time
207−-- , "everyWhen" -: signalOf bool ==> time ==> signalOf time
209+ , "delay" -:: time ==> signalOf a ==> signalOf a
208− , "before" -: time ==> signalOf bool
209− , "after" -: time ==> signalOf bool
210+ , "since" -:: time ==> signalOf a ==> signalOf bool
210− , "hours" -: number ==> time
211+ , "hour" -: time
211− , "minutes" -: number ==> time
212+ , "minute" -: time
212− , "seconds" -: number ==> time
213+ , "second" -: time
213− , "millis" -: number ==> time
214+ , "ms" -: time
214 , "inHours" -: time ==> float
215 , "inHours" -: time ==> float
215 , "inMinutes" -: time ==> float
216 , "inMinutes" -: time ==> float
216 , "inSeconds" -: time ==> float
217 , "inSeconds" -: time ==> float
217− , "inMillis" -: time ==> float
218+ , "inMss" -: time ==> float
218− , "toDate" -: time ==> date
219+ , "toDate" -: time ==> date
219− , "read" -: string ==> maybeOf time
220+ , "read" -: string ==> maybeOf time
@@ -224,8 +225,7 @@ dates =
224 months = map (-: month) [ "Jan", "Feb", "Mar", "Apr", "May", "Jun"
225 months = map (-: month) [ "Jan", "Feb", "Mar", "Apr", "May", "Jun"
225 , "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]
226 , "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]
226 in prefix "Date"
227 in prefix "Date"
227− ([ "every" -: time ==> signalOf date
228− , "read" -: string ==> maybeOf date
228+ ([ "read" -: string ==> maybeOf date
229 , "year" -: date ==> int
229 , "year" -: date ==> int
230 , "month" -: date ==> month
230 , "month" -: date ==> month
231 , "day" -: date ==> int
231 , "day" -: date ==> int