vinyl-0.3: Data/Vinyl/Idiom/LazyIdentity.hs
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveTraversable #-}
module Data.Vinyl.Idiom.LazyIdentity where
import Control.Applicative
import Data.Foldable
import Data.Traversable
data LazyIdentity a
= LazyIdentity
{ runLazyIdentity :: a
} deriving (Functor, Foldable, Traversable)
instance Applicative LazyIdentity where
pure = LazyIdentity
(LazyIdentity f) <*> (LazyIdentity x) = LazyIdentity (f x)
instance Monad LazyIdentity where
return = LazyIdentity
(LazyIdentity x) >>= f = f x
instance Show a => Show (LazyIdentity a) where
show (LazyIdentity x) = show x