{-# LANGUAGE NoImplicitPrelude, MultiParamTypeClasses,
FlexibleContexts, FlexibleInstances #-}
module Data.MaybeLike.Instances
(
module Data.MaybeLike
) where
import Data.Eq ((==))
import Prelude (Bounded(maxBound), (/), isNaN)
import Prelude (Float, Double)
import Data.Char
import Data.Int
import Data.Word
import qualified Data.Maybe as M
import Data.MaybeLike
instance MaybeLike (M.Maybe a) a where
{-# INLINE nothing #-}
nothing = M.Nothing
{-# INLINE isNothing #-}
isNothing = M.isNothing
{-# INLINE just #-}
just = M.Just
{-# INLINE fromJust #-}
fromJust = M.fromJust
instance MaybeLike Char Char where
{-# INLINE nothing #-}
nothing = maxBound
{-# INLINE isNothing #-}
isNothing v = v == maxBound
{-# INLINE just #-}
just v = v
{-# INLINE fromJust #-}
fromJust v = v
instance MaybeLike Int Int where
{-# INLINE nothing #-}
nothing = maxBound
{-# INLINE isNothing #-}
isNothing v = v == maxBound
{-# INLINE just #-}
just v = v
{-# INLINE fromJust #-}
fromJust v = v
instance MaybeLike Int8 Int8 where
{-# INLINE nothing #-}
nothing = maxBound
{-# INLINE isNothing #-}
isNothing v = v == maxBound
{-# INLINE just #-}
just v = v
{-# INLINE fromJust #-}
fromJust v = v
instance MaybeLike Int16 Int16 where
{-# INLINE nothing #-}
nothing = maxBound
{-# INLINE isNothing #-}
isNothing v = v == maxBound
{-# INLINE just #-}
just v = v
{-# INLINE fromJust #-}
fromJust v = v
instance MaybeLike Int32 Int32 where
{-# INLINE nothing #-}
nothing = maxBound
{-# INLINE isNothing #-}
isNothing v = v == maxBound
{-# INLINE just #-}
just v = v
{-# INLINE fromJust #-}
fromJust v = v
instance MaybeLike Int64 Int64 where
{-# INLINE nothing #-}
nothing = maxBound
{-# INLINE isNothing #-}
isNothing v = v == maxBound
{-# INLINE just #-}
just v = v
{-# INLINE fromJust #-}
fromJust v = v
instance MaybeLike Word Word where
{-# INLINE nothing #-}
nothing = maxBound
{-# INLINE isNothing #-}
isNothing v = v == maxBound
{-# INLINE just #-}
just v = v
{-# INLINE fromJust #-}
fromJust v = v
instance MaybeLike Word8 Word8 where
{-# INLINE nothing #-}
nothing = maxBound
{-# INLINE isNothing #-}
isNothing v = v == maxBound
{-# INLINE just #-}
just v = v
{-# INLINE fromJust #-}
fromJust v = v
instance MaybeLike Word16 Word16 where
{-# INLINE nothing #-}
nothing = maxBound
{-# INLINE isNothing #-}
isNothing v = v == maxBound
{-# INLINE just #-}
just v = v
{-# INLINE fromJust #-}
fromJust v = v
instance MaybeLike Word32 Word32 where
{-# INLINE nothing #-}
nothing = maxBound
{-# INLINE isNothing #-}
isNothing v = v == maxBound
{-# INLINE just #-}
just v = v
{-# INLINE fromJust #-}
fromJust v = v
instance MaybeLike Word64 Word64 where
{-# INLINE nothing #-}
nothing = maxBound
{-# INLINE isNothing #-}
isNothing v = v == maxBound
{-# INLINE just #-}
just v = v
{-# INLINE fromJust #-}
fromJust v = v
instance MaybeLike Float Float where
{-# INLINE nothing #-}
nothing = 0/0
{-# INLINE isNothing #-}
isNothing = isNaN
{-# INLINE just #-}
just v = v
{-# INLINE fromJust #-}
fromJust v = v
instance MaybeLike Double Double where
{-# INLINE nothing #-}
nothing = 0/0
{-# INLINE isNothing #-}
isNothing = isNaN
{-# INLINE just #-}
just v = v
{-# INLINE fromJust #-}
fromJust v = v