typed-streams-0.1.0.0: src/Data/Stream.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-|
The "Data.Stream.Typed" module contains more detailed documenation.
This module simply imports functions from "Data.Stream.Typed" and modifies them so
inputs and outputs are always of type 'Data.Stream.Typed.UnknownStream', which this
module renames 'Stream' (yes, this clashes with 'Data.Stream.Typed.Stream' in
"Data.Stream.Typed").
Because of this, using this module more closely emulates how ordinary lists work,
but you miss some of the compile time information you can get using the \"typed\" module.
-}
module Data.Stream (
Stream,
ToStream,
toStream,
runTimeFoldableToStream,
runTimeFoldableToStreamWithLength,
unknownFoldableToStream,
Element,
empty,
singleton,
append,
zip, zipWith,
filter,
concat,
concatMap,
replicate,
iterate,
repeat,
cycle,
null,
unfoldr,
safeLength, SafeLength(KnownSafeLength, UnknownSafeLength, InfiniteSafeLength),
maybeHead,
memotise
)
where
import Prelude (
(.),
Bool,
Int,
Integral,
Maybe,
Foldable
)
import Data.Stream.Typed (
ToStream,
Element,
SafeLength(KnownSafeLength, UnknownSafeLength, InfiniteSafeLength),
wrapUnknown,
unfoldr,
unknownFoldableToStream
)
import qualified Data.Stream.Typed as T
type Stream a = T.UnknownStream a
wrap :: T.Stream l a -> Stream a
wrap = T.wrapUnknown
toStream :: (ToStream a) => a -> Stream (Element a)
toStream = wrap . T.toStream
empty :: Stream a
empty = wrap T.empty
singleton :: a -> Stream a
singleton = wrap . T.singleton
append :: Stream a -> Stream a -> Stream a
append = T.append
zip :: Stream a -> Stream b -> Stream (a, b)
zip = T.zip
zipWith :: (a -> b -> c) -> Stream a -> Stream b -> Stream c
zipWith = T.zipWith
filter :: (a -> Bool) -> Stream a -> Stream a
filter = T.filter
concat :: Stream (Stream a) -> Stream a
concat = T.concat
concatMap :: (a -> Stream b) -> Stream a -> Stream b
concatMap = T.concatMap
replicate :: (Integral b) => b -> a -> Stream a
replicate n x = wrap (T.replicate n x)
iterate :: (a -> a) -> a -> Stream a
iterate f x = wrap (T.iterate f x)
repeat :: a -> Stream a
repeat = wrap . repeat
cycle :: Stream a -> Stream a
cycle = wrap . cycle
safeLength :: Stream a -> SafeLength
safeLength = T.safeLength
maybeHead :: Stream a -> Maybe a
maybeHead = T.maybeHead
memotise :: Stream a -> Stream a
memotise = T.memotise
runTimeFoldableToStream :: (Foldable t) => t a -> Stream a
runTimeFoldableToStream = wrap . T.runTimeFoldableToStream
runTimeFoldableToStreamWithLength :: (Foldable t) => Int -> t a -> Stream a
runTimeFoldableToStreamWithLength n x = wrap (T.runTimeFoldableToStreamWithLength n x)
null :: Stream a -> Bool
null = T.null