--
import Memo
data Stream a = a :^ Stream a
twoz = 2 : twoz
ex1 = head twos
ignore a b = b
fibA 0 = 1
fibA 1 = 1
fibA n = fibA(n-1) + fibA(n-2)
fibs = 1 : 1 : (zipWith (+) fibs (tail fibs))
--- Stream Diagram example:
counter :: [ Bool ] -> [ Integer ]
counter inp = out
 where
 out = ifx inp Then (lift 0) Else next
 next = [0] `followedBy` map (+ 1) out
data Then = Then
data Else = Else
ifx :: [Bool] -> Then -> [a] -> Else -> [a] -> [a]
ifx (b:bs) Then (x:xs) Else (y:ys) =
 (if b then x else y) : (ifx bs Then xs Else ys)
 
followedBy = (++)
lift n = n : (lift n)
--- Client Server Example ------
type Response = Integer
type Request = Integer
client :: [Response] -> [Request]
client ys = 1 : ys
server :: [Request] -> [Response]
server xs = map (+1) xs
reqs = client resps
resps = server reqs
clientB (y : ys) = 
 if ok y 
 then 1 :(y:ys) 
 else error "faulty server"
 where ok x = True
 
clientC ys = 
 1 : (if ok (head ys) then ys else error "faulty server")
 where ok x = True
clientD ~(y:ys) = 
 1 : (if ok y then ys else error "faulty server")
 where ok x = True
---- Memoization ----
fibsFn :: () -> [ Integer ]
fibsFn () = 1 : 1 : (zipWith (+) (fibsFn ()) (tail (fibsFn ())))
mfibsFn x = let mfibs = memo1 mfibsFn
 in 1:1:zipWith(+)(mfibs()) (tail (mfibs()))
--

AltStyle によって変換されたページ (->オリジナル) /