data StreamCell : Type -> TypeNil : StreamCell a(::) : a -> OStream a -> StreamCell aOStream : Type -> Typeappend : OStream a -> OStream a -> OStream a(++) : OStream a -> OStream a -> OStream atake : Int -> OStream a -> OStream adrop : Int -> OStream a -> OStream areverse : OStream a -> OStream a