module Data.Tuple.OneTuple (OneTuple(OneTuple), only) where
import Control.Applicative (Applicative (..))
import Control.Monad (ap)
import Control.Monad.Fix (MonadFix (..))
import Data.Foldable (Foldable (..))
import Data.Ix (Ix (..))
import Data.Monoid (Monoid (..))
import Data.Semigroup (Semigroup (..))
import Data.Traversable (Traversable (..))
data OneTuple a
= OneTuple a
deriving (OneTuple a -> OneTuple a -> Bool
(OneTuple a -> OneTuple a -> Bool)
-> (OneTuple a -> OneTuple a -> Bool) -> Eq (OneTuple a)
forall a. Eq a => OneTuple a -> OneTuple a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: OneTuple a -> OneTuple a -> Bool
$c/= :: forall a. Eq a => OneTuple a -> OneTuple a -> Bool
== :: OneTuple a -> OneTuple a -> Bool
$c== :: forall a. Eq a => OneTuple a -> OneTuple a -> Bool
Eq,Eq (OneTuple a)
Eq (OneTuple a) =>
(OneTuple a -> OneTuple a -> Ordering)
-> (OneTuple a -> OneTuple a -> Bool)
-> (OneTuple a -> OneTuple a -> Bool)
-> (OneTuple a -> OneTuple a -> Bool)
-> (OneTuple a -> OneTuple a -> Bool)
-> (OneTuple a -> OneTuple a -> OneTuple a)
-> (OneTuple a -> OneTuple a -> OneTuple a)
-> Ord (OneTuple a)
OneTuple a -> OneTuple a -> Bool
OneTuple a -> OneTuple a -> Ordering
OneTuple a -> OneTuple a -> OneTuple a
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (OneTuple a)
forall a. Ord a => OneTuple a -> OneTuple a -> Bool
forall a. Ord a => OneTuple a -> OneTuple a -> Ordering
forall a. Ord a => OneTuple a -> OneTuple a -> OneTuple a
min :: OneTuple a -> OneTuple a -> OneTuple a
$cmin :: forall a. Ord a => OneTuple a -> OneTuple a -> OneTuple a
max :: OneTuple a -> OneTuple a -> OneTuple a
$cmax :: forall a. Ord a => OneTuple a -> OneTuple a -> OneTuple a
>= :: OneTuple a -> OneTuple a -> Bool
$c>= :: forall a. Ord a => OneTuple a -> OneTuple a -> Bool
> :: OneTuple a -> OneTuple a -> Bool
$c> :: forall a. Ord a => OneTuple a -> OneTuple a -> Bool
<= :: OneTuple a -> OneTuple a -> Bool
$c<= :: forall a. Ord a => OneTuple a -> OneTuple a -> Bool
< :: OneTuple a -> OneTuple a -> Bool
$c< :: forall a. Ord a => OneTuple a -> OneTuple a -> Bool
compare :: OneTuple a -> OneTuple a -> Ordering
$ccompare :: forall a. Ord a => OneTuple a -> OneTuple a -> Ordering
$cp1Ord :: forall a. Ord a => Eq (OneTuple a)
Ord,OneTuple a
OneTuple a -> OneTuple a -> Bounded (OneTuple a)
forall a. a -> a -> Bounded a
forall a. Bounded a => OneTuple a
maxBound :: OneTuple a
$cmaxBound :: forall a. Bounded a => OneTuple a
minBound :: OneTuple a
$cminBound :: forall a. Bounded a => OneTuple a
Bounded,Int -> OneTuple a -> ShowS
[OneTuple a] -> ShowS
OneTuple a -> String
(Int -> OneTuple a -> ShowS)
-> (OneTuple a -> String)
-> ([OneTuple a] -> ShowS)
-> Show (OneTuple a)
forall a. Show a => Int -> OneTuple a -> ShowS
forall a. Show a => [OneTuple a] -> ShowS
forall a. Show a => OneTuple a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [OneTuple a] -> ShowS
$cshowList :: forall a. Show a => [OneTuple a] -> ShowS
show :: OneTuple a -> String
$cshow :: forall a. Show a => OneTuple a -> String
showsPrec :: Int -> OneTuple a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> OneTuple a -> ShowS
Show,ReadPrec [OneTuple a]
ReadPrec (OneTuple a)
Int -> ReadS (OneTuple a)
ReadS [OneTuple a]
(Int -> ReadS (OneTuple a))
-> ReadS [OneTuple a]
-> ReadPrec (OneTuple a)
-> ReadPrec [OneTuple a]
-> Read (OneTuple a)
forall a. Read a => ReadPrec [OneTuple a]
forall a. Read a => ReadPrec (OneTuple a)
forall a. Read a => Int -> ReadS (OneTuple a)
forall a. Read a => ReadS [OneTuple a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [OneTuple a]
$creadListPrec :: forall a. Read a => ReadPrec [OneTuple a]
readPrec :: ReadPrec (OneTuple a)
$creadPrec :: forall a. Read a => ReadPrec (OneTuple a)
readList :: ReadS [OneTuple a]
$creadList :: forall a. Read a => ReadS [OneTuple a]
readsPrec :: Int -> ReadS (OneTuple a)
$creadsPrec :: forall a. Read a => Int -> ReadS (OneTuple a)
Read)
only :: OneTuple a
-> a
only :: OneTuple a -> a
only (OneTuple x :: a
x) = a
x
instance (Enum a) => Enum (OneTuple a) where
succ :: OneTuple a -> OneTuple a
succ = (a -> a) -> OneTuple a -> OneTuple a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> a
forall a. Enum a => a -> a
succ
pred :: OneTuple a -> OneTuple a
pred = (a -> a) -> OneTuple a -> OneTuple a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> a
forall a. Enum a => a -> a
pred
toEnum :: Int -> OneTuple a
toEnum = a -> OneTuple a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (a -> OneTuple a) -> (Int -> a) -> Int -> OneTuple a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> a
forall a. Enum a => Int -> a
toEnum
fromEnum :: OneTuple a -> Int
fromEnum (OneTuple x :: a
x) = a -> Int
forall a. Enum a => a -> Int
fromEnum a
x
instance (Ix a) => Ix (OneTuple a) where
range :: (OneTuple a, OneTuple a) -> [OneTuple a]
range (OneTuple x :: a
x, OneTuple y :: a
y) = (a -> OneTuple a) -> [a] -> [OneTuple a]
forall a b. (a -> b) -> [a] -> [b]
map a -> OneTuple a
forall a. a -> OneTuple a
OneTuple ((a, a) -> [a]
forall a. Ix a => (a, a) -> [a]
range (a
x,a
y))
index :: (OneTuple a, OneTuple a) -> OneTuple a -> Int
index (OneTuple x :: a
x, OneTuple y :: a
y) (OneTuple z :: a
z) = (a, a) -> a -> Int
forall a. Ix a => (a, a) -> a -> Int
index (a
x,a
y) a
z
inRange :: (OneTuple a, OneTuple a) -> OneTuple a -> Bool
inRange (OneTuple x :: a
x, OneTuple y :: a
y) (OneTuple z :: a
z) = (a, a) -> a -> Bool
forall a. Ix a => (a, a) -> a -> Bool
inRange (a
x,a
y) a
z
instance Foldable OneTuple where
fold :: OneTuple m -> m
fold (OneTuple m :: m
m) = m
m
foldMap :: (a -> m) -> OneTuple a -> m
foldMap f :: a -> m
f (OneTuple x :: a
x) = a -> m
f a
x
foldr :: (a -> b -> b) -> b -> OneTuple a -> b
foldr f :: a -> b -> b
f b :: b
b (OneTuple x :: a
x) = a -> b -> b
f a
x b
b
foldl :: (b -> a -> b) -> b -> OneTuple a -> b
foldl f :: b -> a -> b
f a :: b
a (OneTuple x :: a
x) = b -> a -> b
f b
a a
x
foldr1 :: (a -> a -> a) -> OneTuple a -> a
foldr1 _f :: a -> a -> a
_f (OneTuple x :: a
x) = a
x
foldl1 :: (a -> a -> a) -> OneTuple a -> a
foldl1 _f :: a -> a -> a
_f (OneTuple x :: a
x) = a
x
instance Traversable OneTuple where
traverse :: (a -> f b) -> OneTuple a -> f (OneTuple b)
traverse f :: a -> f b
f (OneTuple x :: a
x) = (b -> OneTuple b) -> f b -> f (OneTuple b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap b -> OneTuple b
forall a. a -> OneTuple a
OneTuple (a -> f b
f a
x)
sequenceA :: OneTuple (f a) -> f (OneTuple a)
sequenceA (OneTuple x :: f a
x) = (a -> OneTuple a) -> f a -> f (OneTuple a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> OneTuple a
forall a. a -> OneTuple a
OneTuple f a
x
instance Functor OneTuple where
fmap :: (a -> b) -> OneTuple a -> OneTuple b
fmap f :: a -> b
f (OneTuple x :: a
x) = b -> OneTuple b
forall a. a -> OneTuple a
OneTuple (a -> b
f a
x)
instance Applicative OneTuple where
pure :: a -> OneTuple a
pure = a -> OneTuple a
forall a. a -> OneTuple a
OneTuple
OneTuple f :: a -> b
f <*> :: OneTuple (a -> b) -> OneTuple a -> OneTuple b
<*> OneTuple x :: a
x = b -> OneTuple b
forall a. a -> OneTuple a
OneTuple (a -> b
f a
x)
_ *> :: OneTuple a -> OneTuple b -> OneTuple b
*> x :: OneTuple b
x = OneTuple b
x
x :: OneTuple a
x <* :: OneTuple a -> OneTuple b -> OneTuple a
<* _ = OneTuple a
x
instance Monad OneTuple where
return :: a -> OneTuple a
return = a -> OneTuple a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
>> :: OneTuple a -> OneTuple b -> OneTuple b
(>>) = OneTuple a -> OneTuple b -> OneTuple b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
(*>)
(OneTuple x :: a
x) >>= :: OneTuple a -> (a -> OneTuple b) -> OneTuple b
>>= f :: a -> OneTuple b
f = a -> OneTuple b
f a
x
instance (Semigroup a) => Semigroup (OneTuple a) where
OneTuple x :: a
x <> :: OneTuple a -> OneTuple a -> OneTuple a
<> OneTuple y :: a
y = a -> OneTuple a
forall a. a -> OneTuple a
OneTuple (a
x a -> a -> a
forall a. Semigroup a => a -> a -> a
<> a
y)
instance (Monoid a) => Monoid (OneTuple a) where
mempty :: OneTuple a
mempty = a -> OneTuple a
forall a. a -> OneTuple a
OneTuple a
forall a. Monoid a => a
mempty
mappend :: OneTuple a -> OneTuple a -> OneTuple a
mappend (OneTuple x :: a
x) (OneTuple y :: a
y) = a -> OneTuple a
forall a. a -> OneTuple a
OneTuple (a -> a -> a
forall a. Monoid a => a -> a -> a
mappend a
x a
y)
instance MonadFix OneTuple where
mfix :: (a -> OneTuple a) -> OneTuple a
mfix f :: a -> OneTuple a
f = let a :: OneTuple a
a = a -> OneTuple a
f (OneTuple a -> a
forall a. OneTuple a -> a
only OneTuple a
a) in OneTuple a
a