module Data.Stream.Hinze.Idiom where
import Prelude (($))
-- | A reimplementation of the classic 'idioms' class, which is now
-- known as Applicative.
--
class Idiom f where
pure :: a -> f a
(<>) :: f (a -> b) -> (f a -> f b)
repeat :: a -> f a
map :: (a -> b) -> (f a -> f b)
zip :: (a -> b -> c) -> (f a -> f b -> f c)
pure = repeat
(<>) = zip ($)
repeat a = pure a
map f s = pure f <> s
zip g s t = pure g <> s <> t