trivia-0.0: Control/Monad/One.hs
{-# LANGUAGE DeriveDataTypeable, DeriveFunctor, DeriveFoldable, DeriveTraversable #-}
module Control.Monad.One (One(..)) where
import Control.Applicative
import Data.Foldable
import Data.Traversable
import Data.Monoid
import Data.Distributive
import Control.Monad
import Data.Typeable
data One a = One deriving (Show, Read, Eq, Ord, Enum, Functor, Foldable, Traversable, Typeable)
instance Monoid (One a) where
mempty = One
mappend _ _ = One
instance Monad One where
return _ = One
{-# INLINE return #-}
_ >>= _ = One
{-# INLINE (>>=) #-}
instance Applicative One where
pure _ = One
{-# INLINE pure #-}
_ <*> _ = One
{-# INLINE (<*>) #-}
instance Alternative One where
empty = One
{-# INLINE empty #-}
_ <|> _ = One
{-# INLINE (<|>) #-}
instance MonadPlus One where
mzero = One
mplus _ _ = One
instance Distributive One where
distribute _ = One
{-# INLINE distribute #-}
collect _ _ = One
{-# INLINE collect #-}