@@ -55,17 +55,16 @@ init' s f = Step (\x -> let (s',out) = f x s
55count : Automaton a Int
55count : Automaton a Int
56count = init 0 (\_ c -> c + 1)
56count = init 0 (\_ c -> c + 1)
59type Queue t = ([t],[t])
58type Queue t = ([t],[t])
60empty = ([],[])
59empty = ([],[])
61−enqueue x (en,de) = (x:en, de)
60+enqueue x (en,de) = (x::en, de)
62dequeue q = case q of
61dequeue q = case q of
63 ([],[]) -> Nothing
62 ([],[]) -> Nothing
64 (en,[]) -> enqueue ([], reverse en)
63 (en,[]) -> enqueue ([], reverse en)
65 (en,hd::tl) -> Just (hd, (en,tl))
64 (en,hd::tl) -> Just (hd, (en,tl))
67-- Computes the running average of the last `n` inputs.
66-- Computes the running average of the last `n` inputs.
68−average : Int -> Automaton Float Float
67+average : Int -> Automaton (Number a) (Number a)
69average k =
68average k =
70 let step n (ns,len,sum) =
69 let step n (ns,len,sum) =
71 if len == k then stepFull n (ns,len,sum)
70 if len == k then stepFull n (ns,len,sum)
@@ -76,7 +75,7 @@ average k =
76 Just (m,ns') -> let sum' = sum + n - m
75 Just (m,ns') -> let sum' = sum + n - m
77 in ((enqueue n ns', len, sum'), sum' / len)
76 in ((enqueue n ns', len, sum'), sum' / len)
78 in init' (empty,0,0) step
77 in init' (empty,0,0) step
80{-- TODO(evancz): move this code to the Form library so people can find it.
79{-- TODO(evancz): move this code to the Form library so people can find it.
82data DragState = Listen | Ignore | DragFrom (Int,Int)
81data DragState = Listen | Ignore | DragFrom (Int,Int)