6 | data StreamCell a = Nil | (::) a (OStream a)
16 | OStream : Type -> Type
17 | OStream a = Lazy (StreamCell a)
20 | append' : OStream a -> OStream a -> OStream a
22 | append' (x :: s) t = x :: append s t
25 | append : OStream a -> OStream a -> OStream a
26 | append s t = Delay (Force (append' s t))
29 | (++) : OStream a -> OStream a -> OStream a
33 | take' : Int -> OStream a -> OStream a
36 | take' n (x :: s) = x :: take (n - 1) s
39 | take : Int -> OStream a -> OStream a
40 | take n s = Delay (Force (take' n s))
42 | drop' : Int -> OStream a -> OStream a
45 | drop' n (x :: s) = drop' (n - 1) s
48 | drop : Int -> OStream a -> OStream a
49 | drop n s = Delay (Force (drop' n s))
51 | reverse' : OStream a -> OStream a -> OStream a
53 | reverse' (x :: s) r = reverse' s (x :: r)
56 | reverse : OStream a -> OStream a
57 | reverse s = Delay (Force (reverse' s []))