mu-schema-0.1.0.0: src/Data/Functor/MaybeLike.hs
{-|
Description : Type constructors which can be turned into 'Maybe'.
Type constructors which can be turned into 'Maybe'.
-}
module Data.Functor.MaybeLike where
import Data.Functor.Identity
-- | This class may be defined in two ways:
--
-- * Type constructors which can be turned into 'Maybe' generically.
-- * Type constructors which admit a natural transformation to 'Maybe'.
--
-- We expect the following rules to hold for those
-- instances of 'MaybeLike' which are also 'Control.Applicative.Alternative':
--
-- * @likeMaybe empty = empty = Nothing@
-- * @likeMaybe (x <|> y) = likeMaybe x <|> likeMaybe y@
class MaybeLike f where
likeMaybe :: f a -> Maybe a
instance MaybeLike Identity where
likeMaybe = Just . runIdentity
instance MaybeLike Maybe where
likeMaybe = id
instance MaybeLike (Either a) where
likeMaybe (Left _) = Nothing
likeMaybe (Right y) = Just y