monad-memo-0.4.0: Data/MaybeLike/Instances.hs
{- |
Module : Data.MaybeLike.Instances
Copyright : (c) Eduard Sergeev 2013
License : BSD-style (see the file LICENSE)
Maintainer : eduard.sergeev@gmail.com
Stability : experimental
Portability : non-portable (multi-param classes, functional dependencies)
Defines default instances of `MaybeLike` for most primitive "Unboxed" types
-}
{-# 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