prologue-3.0.9: src/Prologue/Data/OneTuple.hs
module Prologue.Data.OneTuple where
-- Implemented unless OneTuple package will not be GHC 8.4 compatible.
-- Moreover, we may want to leave it because its newtype, while the
-- package's version is just a data type.
import Control.Applicative
import Control.Monad
import Control.Monad.Fix
import Data.Ix
import Data.Monoid
import Data.Semigroup
import Prelude
newtype OneTuple a = OneTuple { fromOneTuple :: a }
deriving ( Bounded, Enum, Eq, Foldable, Functor, Ix, Monoid, Ord, Read
, Semigroup, Show, Traversable )
instance Applicative OneTuple where
pure = OneTuple ; {-# INLINE pure #-}
OneTuple f <*> OneTuple a = OneTuple $ f a ; {-# INLINE (<*>) #-}
instance Monad OneTuple where
return = pure ; {-# INLINE return #-}
OneTuple a >>= f = f a ; {-# INLINE (>>=) #-}
instance MonadFix OneTuple where
mfix f = OneTuple $ fix (fromOneTuple . f) ; {-# INLINE mfix #-}