(original) (raw)
{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-}
module Data.Semigroup.Internal where
import GHC.Base hiding (Any) import GHC.Enum import GHC.Num import GHC.Read import GHC.Show import GHC.Generics import GHC.Real
stimesIdempotent :: Integral b => b -> a -> a stimesIdempotent :: forall b a. Integral b => b -> a -> a stimesIdempotent b n a x | b n b -> b -> Bool forall a. Ord a => a -> a -> Bool <= b 0 = [Char] -> a forall a. [Char] -> a errorWithoutStackTrace [Char] "stimesIdempotent: positive multiplier expected" | Bool otherwise = a x
stimesIdempotentMonoid :: (Integral b, Monoid a) => b -> a -> a stimesIdempotentMonoid :: forall b a. (Integral b, Monoid a) => b -> a -> a stimesIdempotentMonoid b n a x = case b -> b -> Ordering forall a. Ord a => a -> a -> Ordering compare b n b 0 of Ordering LT -> [Char] -> a forall a. [Char] -> a errorWithoutStackTrace [Char] "stimesIdempotentMonoid: negative multiplier" Ordering EQ -> a forall a. Monoid a => a mempty Ordering GT -> a x
stimesMonoid :: (Integral b, Monoid a) => b -> a -> a
stimesMonoid :: forall b a. (Integral b, Monoid a) => b -> a -> a
stimesMonoid b
n a
x0 = case b -> b -> Ordering
forall a. Ord a => a -> a -> Ordering
compare b
n b
0 of
Ordering
LT -> [Char] -> a
forall a. [Char] -> a
errorWithoutStackTrace [Char]
"stimesMonoid: negative multiplier"
Ordering
EQ -> a
forall a. Monoid a => a
mempty
Ordering
GT -> a -> b -> a
forall {a} {t}. (Integral a, Monoid t) => t -> a -> t
f a
x0 b
n
where
f :: t -> a -> t
f t
x a
y
| a -> Bool
forall a. Integral a => a -> Bool
even a
y = t -> a -> t
f (t
x t -> t -> t
forall a. Monoid a => a -> a -> a
mappend t
x) (a
y a -> a -> a
forall a. Integral a => a -> a -> a
quot a
2)
| a
y a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
1 = t
x
| Bool
otherwise = t -> a -> t -> t
forall {a} {t}. (Integral a, Monoid t) => t -> a -> t -> t
g (t
x t -> t -> t
forall a. Monoid a => a -> a -> a
mappend t
x) (a
y a -> a -> a
forall a. Integral a => a -> a -> a
quot a
2) t
x
g :: t -> a -> t -> t
g t
x a
y t
z
| a -> Bool
forall a. Integral a => a -> Bool
even a
y = t -> a -> t -> t
g (t
x t -> t -> t
forall a. Monoid a => a -> a -> a
mappend t
x) (a
y a -> a -> a
forall a. Integral a => a -> a -> a
quot a
2) t
z
| a
y a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
1 = t
x t -> t -> t
forall a. Monoid a => a -> a -> a
mappend t
z
| Bool
otherwise = t -> a -> t -> t
g (t
x t -> t -> t
forall a. Monoid a => a -> a -> a
mappend t
x) (a
y a -> a -> a
forall a. Integral a => a -> a -> a
quot a
2) (t
x t -> t -> t
forall a. Monoid a => a -> a -> a
mappend t
z)
stimesDefault :: (Integral b, Semigroup a) => b -> a -> a
stimesDefault :: forall b a. (Integral b, Semigroup a) => b -> a -> a
stimesDefault b
y0 a
x0
| b
y0 b -> b -> Bool
forall a. Ord a => a -> a -> Bool
<= b
0 = [Char] -> a
forall a. [Char] -> a
errorWithoutStackTrace [Char]
"stimes: positive multiplier expected"
| Bool
otherwise = a -> b -> a
forall {a} {t}. (Integral a, Semigroup t) => t -> a -> t
f a
x0 b
y0
where
f :: t -> a -> t
f t
x a
y
| a -> Bool
forall a. Integral a => a -> Bool
even a
y = t -> a -> t
f (t
x t -> t -> t
forall a. Semigroup a => a -> a -> a
<> t
x) (a
y a -> a -> a
forall a. Integral a => a -> a -> a
quot a
2)
| a
y a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
1 = t
x
| Bool
otherwise = t -> a -> t -> t
forall {a} {t}. (Integral a, Semigroup t) => t -> a -> t -> t
g (t
x t -> t -> t
forall a. Semigroup a => a -> a -> a
<> t
x) (a
y a -> a -> a
forall a. Integral a => a -> a -> a
quot a
2) t
x
g :: t -> a -> t -> t
g t
x a
y t
z
| a -> Bool
forall a. Integral a => a -> Bool
even a
y = t -> a -> t -> t
g (t
x t -> t -> t
forall a. Semigroup a => a -> a -> a
<> t
x) (a
y a -> a -> a
forall a. Integral a => a -> a -> a
quot a
2) t
z
| a
y a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
1 = t
x t -> t -> t
forall a. Semigroup a => a -> a -> a
<> t
z
| Bool
otherwise = t -> a -> t -> t
g (t
x t -> t -> t
forall a. Semigroup a => a -> a -> a
<> t
x) (a
y a -> a -> a
forall a. Integral a => a -> a -> a
quot a
2) (t
x t -> t -> t
forall a. Semigroup a => a -> a -> a
<> t
z)
stimesMaybe :: (Integral b, Semigroup a) => b -> Maybe a -> Maybe a stimesMaybe :: forall b a. (Integral b, Semigroup a) => b -> Maybe a -> Maybe a stimesMaybe b _ Maybe a Nothing = Maybe a forall a. Maybe a Nothing stimesMaybe b n (Just a a) = case b -> b -> Ordering forall a. Ord a => a -> a -> Ordering compare b n b 0 of Ordering LT -> [Char] -> Maybe a forall a. [Char] -> a errorWithoutStackTrace [Char] "stimes: Maybe, negative multiplier" Ordering EQ -> Maybe a forall a. Maybe a Nothing Ordering GT -> a -> Maybe a forall a. a -> Maybe a Just (b -> a -> a forall a b. (Semigroup a, Integral b) => b -> a -> a stimes b n a a)
stimesList :: Integral b => b -> [a] -> [a] stimesList :: forall b a. Integral b => b -> [a] -> [a] stimesList b n [a] x | b n b -> b -> Bool forall a. Ord a => a -> a -> Bool < b 0 = [Char] -> [a] forall a. [Char] -> a errorWithoutStackTrace [Char] "stimes: [], negative multiplier" | Bool otherwise = b -> [a] forall {t}. (Eq t, Num t) => t -> [a] rep b n where rep :: t -> [a] rep t 0 = [] rep t i = [a] x [a] -> [a] -> [a] forall a. [a] -> [a] -> [a] ++ t -> [a] rep (t i t -> t -> t forall a. Num a => a -> a -> a - t 1)
newtype Dual a = Dual { forall a. Dual a -> a
getDual :: a }
deriving ( Dual a -> Dual a -> Bool
(Dual a -> Dual a -> Bool)
-> (Dual a -> Dual a -> Bool) -> Eq (Dual a)
forall a. Eq a => Dual a -> Dual a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Dual a -> Dual a -> Bool
$c/= :: forall a. Eq a => Dual a -> Dual a -> Bool
== :: Dual a -> Dual a -> Bool
$c== :: forall a. Eq a => Dual a -> Dual a -> Bool
Eq
, Eq (Dual a)
Eq (Dual a)
-> (Dual a -> Dual a -> Ordering)
-> (Dual a -> Dual a -> Bool)
-> (Dual a -> Dual a -> Bool)
-> (Dual a -> Dual a -> Bool)
-> (Dual a -> Dual a -> Bool)
-> (Dual a -> Dual a -> Dual a)
-> (Dual a -> Dual a -> Dual a)
-> Ord (Dual a)
Dual a -> Dual a -> Bool
Dual a -> Dual a -> Ordering
Dual a -> Dual a -> Dual 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 (Dual a)
forall a. Ord a => Dual a -> Dual a -> Bool
forall a. Ord a => Dual a -> Dual a -> Ordering
forall a. Ord a => Dual a -> Dual a -> Dual a
min :: Dual a -> Dual a -> Dual a
$cmin :: forall a. Ord a => Dual a -> Dual a -> Dual a
max :: Dual a -> Dual a -> Dual a
$cmax :: forall a. Ord a => Dual a -> Dual a -> Dual a
= :: Dual a -> Dual a -> Bool $c>= :: forall a. Ord a => Dual a -> Dual a -> Bool :: Dual a -> Dual a -> Bool $c> :: forall a. Ord a => Dual a -> Dual a -> Bool <= :: Dual a -> Dual a -> Bool $c<= :: forall a. Ord a => Dual a -> Dual a -> Bool < :: Dual a -> Dual a -> Bool $c< :: forall a. Ord a => Dual a -> Dual a -> Bool compare :: Dual a -> Dual a -> Ordering $ccompare :: forall a. Ord a => Dual a -> Dual a -> Ordering Ord
, ReadPrec [Dual a] ReadPrec (Dual a) Int -> ReadS (Dual a) ReadS [Dual a] (Int -> ReadS (Dual a)) -> ReadS [Dual a] -> ReadPrec (Dual a) -> ReadPrec [Dual a] -> Read (Dual a) forall a. Read a => ReadPrec [Dual a] forall a. Read a => ReadPrec (Dual a) forall a. Read a => Int -> ReadS (Dual a) forall a. Read a => ReadS [Dual a] forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [Dual a] $creadListPrec :: forall a. Read a => ReadPrec [Dual a] readPrec :: ReadPrec (Dual a) $creadPrec :: forall a. Read a => ReadPrec (Dual a) readList :: ReadS [Dual a] $creadList :: forall a. Read a => ReadS [Dual a] readsPrec :: Int -> ReadS (Dual a) $creadsPrec :: forall a. Read a => Int -> ReadS (Dual a) Read
, Int -> Dual a -> ShowS [Dual a] -> ShowS Dual a -> [Char] (Int -> Dual a -> ShowS) -> (Dual a -> [Char]) -> ([Dual a] -> ShowS) -> Show (Dual a) forall a. Show a => Int -> Dual a -> ShowS forall a. Show a => [Dual a] -> ShowS forall a. Show a => Dual a -> [Char] forall a. (Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a showList :: [Dual a] -> ShowS $cshowList :: forall a. Show a => [Dual a] -> ShowS show :: Dual a -> [Char] $cshow :: forall a. Show a => Dual a -> [Char] showsPrec :: Int -> Dual a -> ShowS $cshowsPrec :: forall a. Show a => Int -> Dual a -> ShowS Show
, Dual a Dual a -> Dual a -> Bounded (Dual a) forall a. a -> a -> Bounded a forall a. Bounded a => Dual a maxBound :: Dual a $cmaxBound :: forall a. Bounded a => Dual a minBound :: Dual a $cminBound :: forall a. Bounded a => Dual a Bounded
, (forall x. Dual a -> Rep (Dual a) x) -> (forall x. Rep (Dual a) x -> Dual a) -> Generic (Dual a) forall x. Rep (Dual a) x -> Dual a forall x. Dual a -> Rep (Dual a) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall a x. Rep (Dual a) x -> Dual a forall a x. Dual a -> Rep (Dual a) x $cto :: forall a x. Rep (Dual a) x -> Dual a $cfrom :: forall a x. Dual a -> Rep (Dual a) x Generic
, (forall a. Dual a -> Rep1 Dual a) -> (forall a. Rep1 Dual a -> Dual a) -> Generic1 Dual forall a. Rep1 Dual a -> Dual a forall a. Dual a -> Rep1 Dual a forall k (f :: k -> *). (forall (a :: k). f a -> Rep1 f a) -> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f $cto1 :: forall a. Rep1 Dual a -> Dual a $cfrom1 :: forall a. Dual a -> Rep1 Dual a Generic1 )
instance Semigroup a => Semigroup (Dual a) where Dual a a <> :: Dual a -> Dual a -> Dual a <> Dual a b = a -> Dual a forall a. a -> Dual a Dual (a b a -> a -> a forall a. Semigroup a => a -> a -> a <> a a) stimes :: forall b. Integral b => b -> Dual a -> Dual a stimes b n (Dual a a) = a -> Dual a forall a. a -> Dual a Dual (b -> a -> a forall a b. (Semigroup a, Integral b) => b -> a -> a stimes b n a a)
instance Monoid a => Monoid (Dual a) where mempty :: Dual a mempty = a -> Dual a forall a. a -> Dual a Dual a forall a. Monoid a => a mempty
instance Functor Dual where fmap :: forall a b. (a -> b) -> Dual a -> Dual b fmap = (a -> b) -> Dual a -> Dual b coerce
instance Applicative Dual where pure :: forall a. a -> Dual a pure = a -> Dual a forall a. a -> Dual a Dual <*> :: forall a b. Dual (a -> b) -> Dual a -> Dual b (<*>) = Dual (a -> b) -> Dual a -> Dual b coerce
instance Monad Dual where Dual a m >>= :: forall a b. Dual a -> (a -> Dual b) -> Dual b >>= a -> Dual b k = a -> Dual b k (Dual a -> a forall a. Dual a -> a getDual Dual a m)
newtype Endo a = Endo { forall a. Endo a -> a -> a appEndo :: a -> a } deriving ( (forall x. Endo a -> Rep (Endo a) x) -> (forall x. Rep (Endo a) x -> Endo a) -> Generic (Endo a) forall x. Rep (Endo a) x -> Endo a forall x. Endo a -> Rep (Endo a) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall a x. Rep (Endo a) x -> Endo a forall a x. Endo a -> Rep (Endo a) x $cto :: forall a x. Rep (Endo a) x -> Endo a $cfrom :: forall a x. Endo a -> Rep (Endo a) x Generic )
instance Semigroup (Endo a) where <> :: Endo a -> Endo a -> Endo a (<>) = ((a -> a) -> (a -> a) -> a -> a) -> Endo a -> Endo a -> Endo a coerce ((a -> a) -> (a -> a) -> a -> a forall b c a. (b -> c) -> (a -> b) -> a -> c (.) :: (a -> a) -> (a -> a) -> (a -> a)) stimes :: forall b. Integral b => b -> Endo a -> Endo a stimes = b -> Endo a -> Endo a forall b a. (Integral b, Monoid a) => b -> a -> a stimesMonoid
instance Monoid (Endo a) where mempty :: Endo a mempty = (a -> a) -> Endo a forall a. (a -> a) -> Endo a Endo a -> a forall a. a -> a id
newtype All = All { All -> Bool
getAll :: Bool }
deriving ( All -> All -> Bool
(All -> All -> Bool) -> (All -> All -> Bool) -> Eq All
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: All -> All -> Bool
$c/= :: All -> All -> Bool
== :: All -> All -> Bool
$c== :: All -> All -> Bool
Eq
, Eq All
Eq All
-> (All -> All -> Ordering)
-> (All -> All -> Bool)
-> (All -> All -> Bool)
-> (All -> All -> Bool)
-> (All -> All -> Bool)
-> (All -> All -> All)
-> (All -> All -> All)
-> Ord All
All -> All -> Bool
All -> All -> Ordering
All -> All -> All
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
min :: All -> All -> All
$cmin :: All -> All -> All
max :: All -> All -> All
$cmax :: All -> All -> All
= :: All -> All -> Bool $c>= :: All -> All -> Bool :: All -> All -> Bool $c> :: All -> All -> Bool <= :: All -> All -> Bool $c<= :: All -> All -> Bool < :: All -> All -> Bool $c< :: All -> All -> Bool compare :: All -> All -> Ordering $ccompare :: All -> All -> Ordering Ord
, ReadPrec [All] ReadPrec All Int -> ReadS All ReadS [All] (Int -> ReadS All) -> ReadS [All] -> ReadPrec All -> ReadPrec [All] -> Read All forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [All] $creadListPrec :: ReadPrec [All] readPrec :: ReadPrec All $creadPrec :: ReadPrec All readList :: ReadS [All] $creadList :: ReadS [All] readsPrec :: Int -> ReadS All $creadsPrec :: Int -> ReadS All Read
, Int -> All -> ShowS [All] -> ShowS All -> [Char] (Int -> All -> ShowS) -> (All -> [Char]) -> ([All] -> ShowS) -> Show All forall a. (Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a showList :: [All] -> ShowS $cshowList :: [All] -> ShowS show :: All -> [Char] $cshow :: All -> [Char] showsPrec :: Int -> All -> ShowS $cshowsPrec :: Int -> All -> ShowS Show
, All All -> All -> Bounded All forall a. a -> a -> Bounded a maxBound :: All $cmaxBound :: All minBound :: All $cminBound :: All Bounded , (forall x. All -> Rep All x) -> (forall x. Rep All x -> All) -> Generic All forall x. Rep All x -> All forall x. All -> Rep All x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep All x -> All $cfrom :: forall x. All -> Rep All x Generic )
instance Semigroup All where <> :: All -> All -> All (<>) = (Bool -> Bool -> Bool) -> All -> All -> All coerce Bool -> Bool -> Bool (&&) stimes :: forall b. Integral b => b -> All -> All stimes = b -> All -> All forall b a. (Integral b, Monoid a) => b -> a -> a stimesIdempotentMonoid
instance Monoid All where mempty :: All mempty = Bool -> All All Bool True
newtype Any = Any { Any -> Bool
getAny :: Bool }
deriving ( Any -> Any -> Bool
(Any -> Any -> Bool) -> (Any -> Any -> Bool) -> Eq Any
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Any -> Any -> Bool
$c/= :: Any -> Any -> Bool
== :: Any -> Any -> Bool
$c== :: Any -> Any -> Bool
Eq
, Eq Any
Eq Any
-> (Any -> Any -> Ordering)
-> (Any -> Any -> Bool)
-> (Any -> Any -> Bool)
-> (Any -> Any -> Bool)
-> (Any -> Any -> Bool)
-> (Any -> Any -> Any)
-> (Any -> Any -> Any)
-> Ord Any
Any -> Any -> Bool
Any -> Any -> Ordering
Any -> Any -> Any
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
min :: Any -> Any -> Any
$cmin :: Any -> Any -> Any
max :: Any -> Any -> Any
$cmax :: Any -> Any -> Any
= :: Any -> Any -> Bool $c>= :: Any -> Any -> Bool :: Any -> Any -> Bool $c> :: Any -> Any -> Bool <= :: Any -> Any -> Bool $c<= :: Any -> Any -> Bool < :: Any -> Any -> Bool $c< :: Any -> Any -> Bool compare :: Any -> Any -> Ordering $ccompare :: Any -> Any -> Ordering Ord
, ReadPrec [Any] ReadPrec Any Int -> ReadS Any ReadS [Any] (Int -> ReadS Any) -> ReadS [Any] -> ReadPrec Any -> ReadPrec [Any] -> Read Any forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [Any] $creadListPrec :: ReadPrec [Any] readPrec :: ReadPrec Any $creadPrec :: ReadPrec Any readList :: ReadS [Any] $creadList :: ReadS [Any] readsPrec :: Int -> ReadS Any $creadsPrec :: Int -> ReadS Any Read
, Int -> Any -> ShowS [Any] -> ShowS Any -> [Char] (Int -> Any -> ShowS) -> (Any -> [Char]) -> ([Any] -> ShowS) -> Show Any forall a. (Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a showList :: [Any] -> ShowS $cshowList :: [Any] -> ShowS show :: Any -> [Char] $cshow :: Any -> [Char] showsPrec :: Int -> Any -> ShowS $cshowsPrec :: Int -> Any -> ShowS Show
, Any Any -> Any -> Bounded Any forall a. a -> a -> Bounded a maxBound :: Any $cmaxBound :: Any minBound :: Any $cminBound :: Any Bounded , (forall x. Any -> Rep Any x) -> (forall x. Rep Any x -> Any) -> Generic Any forall x. Rep Any x -> Any forall x. Any -> Rep Any x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep Any x -> Any $cfrom :: forall x. Any -> Rep Any x Generic )
instance Semigroup Any where <> :: Any -> Any -> Any (<>) = (Bool -> Bool -> Bool) -> Any -> Any -> Any coerce Bool -> Bool -> Bool (||) stimes :: forall b. Integral b => b -> Any -> Any stimes = b -> Any -> Any forall b a. (Integral b, Monoid a) => b -> a -> a stimesIdempotentMonoid
instance Monoid Any where mempty :: Any mempty = Bool -> Any Any Bool False
newtype Sum a = Sum { forall a. Sum a -> a
getSum :: a }
deriving ( Sum a -> Sum a -> Bool
(Sum a -> Sum a -> Bool) -> (Sum a -> Sum a -> Bool) -> Eq (Sum a)
forall a. Eq a => Sum a -> Sum a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Sum a -> Sum a -> Bool
$c/= :: forall a. Eq a => Sum a -> Sum a -> Bool
== :: Sum a -> Sum a -> Bool
$c== :: forall a. Eq a => Sum a -> Sum a -> Bool
Eq
, Eq (Sum a)
Eq (Sum a)
-> (Sum a -> Sum a -> Ordering)
-> (Sum a -> Sum a -> Bool)
-> (Sum a -> Sum a -> Bool)
-> (Sum a -> Sum a -> Bool)
-> (Sum a -> Sum a -> Bool)
-> (Sum a -> Sum a -> Sum a)
-> (Sum a -> Sum a -> Sum a)
-> Ord (Sum a)
Sum a -> Sum a -> Bool
Sum a -> Sum a -> Ordering
Sum a -> Sum a -> Sum 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 (Sum a)
forall a. Ord a => Sum a -> Sum a -> Bool
forall a. Ord a => Sum a -> Sum a -> Ordering
forall a. Ord a => Sum a -> Sum a -> Sum a
min :: Sum a -> Sum a -> Sum a
$cmin :: forall a. Ord a => Sum a -> Sum a -> Sum a
max :: Sum a -> Sum a -> Sum a
$cmax :: forall a. Ord a => Sum a -> Sum a -> Sum a
= :: Sum a -> Sum a -> Bool $c>= :: forall a. Ord a => Sum a -> Sum a -> Bool :: Sum a -> Sum a -> Bool $c> :: forall a. Ord a => Sum a -> Sum a -> Bool <= :: Sum a -> Sum a -> Bool $c<= :: forall a. Ord a => Sum a -> Sum a -> Bool < :: Sum a -> Sum a -> Bool $c< :: forall a. Ord a => Sum a -> Sum a -> Bool compare :: Sum a -> Sum a -> Ordering $ccompare :: forall a. Ord a => Sum a -> Sum a -> Ordering Ord
, ReadPrec [Sum a] ReadPrec (Sum a) Int -> ReadS (Sum a) ReadS [Sum a] (Int -> ReadS (Sum a)) -> ReadS [Sum a] -> ReadPrec (Sum a) -> ReadPrec [Sum a] -> Read (Sum a) forall a. Read a => ReadPrec [Sum a] forall a. Read a => ReadPrec (Sum a) forall a. Read a => Int -> ReadS (Sum a) forall a. Read a => ReadS [Sum a] forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [Sum a] $creadListPrec :: forall a. Read a => ReadPrec [Sum a] readPrec :: ReadPrec (Sum a) $creadPrec :: forall a. Read a => ReadPrec (Sum a) readList :: ReadS [Sum a] $creadList :: forall a. Read a => ReadS [Sum a] readsPrec :: Int -> ReadS (Sum a) $creadsPrec :: forall a. Read a => Int -> ReadS (Sum a) Read
, Int -> Sum a -> ShowS [Sum a] -> ShowS Sum a -> [Char] (Int -> Sum a -> ShowS) -> (Sum a -> [Char]) -> ([Sum a] -> ShowS) -> Show (Sum a) forall a. Show a => Int -> Sum a -> ShowS forall a. Show a => [Sum a] -> ShowS forall a. Show a => Sum a -> [Char] forall a. (Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a showList :: [Sum a] -> ShowS $cshowList :: forall a. Show a => [Sum a] -> ShowS show :: Sum a -> [Char] $cshow :: forall a. Show a => Sum a -> [Char] showsPrec :: Int -> Sum a -> ShowS $cshowsPrec :: forall a. Show a => Int -> Sum a -> ShowS Show
, Sum a Sum a -> Sum a -> Bounded (Sum a) forall a. a -> a -> Bounded a forall a. Bounded a => Sum a maxBound :: Sum a $cmaxBound :: forall a. Bounded a => Sum a minBound :: Sum a $cminBound :: forall a. Bounded a => Sum a Bounded
, (forall x. Sum a -> Rep (Sum a) x) -> (forall x. Rep (Sum a) x -> Sum a) -> Generic (Sum a) forall x. Rep (Sum a) x -> Sum a forall x. Sum a -> Rep (Sum a) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall a x. Rep (Sum a) x -> Sum a forall a x. Sum a -> Rep (Sum a) x $cto :: forall a x. Rep (Sum a) x -> Sum a $cfrom :: forall a x. Sum a -> Rep (Sum a) x Generic
, (forall a. Sum a -> Rep1 Sum a) -> (forall a. Rep1 Sum a -> Sum a) -> Generic1 Sum forall a. Rep1 Sum a -> Sum a forall a. Sum a -> Rep1 Sum a forall k (f :: k -> *). (forall (a :: k). f a -> Rep1 f a) -> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f $cto1 :: forall a. Rep1 Sum a -> Sum a $cfrom1 :: forall a. Sum a -> Rep1 Sum a Generic1 , Integer -> Sum a Sum a -> Sum a Sum a -> Sum a -> Sum a (Sum a -> Sum a -> Sum a) -> (Sum a -> Sum a -> Sum a) -> (Sum a -> Sum a -> Sum a) -> (Sum a -> Sum a) -> (Sum a -> Sum a) -> (Sum a -> Sum a) -> (Integer -> Sum a) -> Num (Sum a) forall a. Num a => Integer -> Sum a forall a. Num a => Sum a -> Sum a forall a. Num a => Sum a -> Sum a -> Sum a forall a. (a -> a -> a) -> (a -> a -> a) -> (a -> a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (Integer -> a) -> Num a fromInteger :: Integer -> Sum a $cfromInteger :: forall a. Num a => Integer -> Sum a signum :: Sum a -> Sum a $csignum :: forall a. Num a => Sum a -> Sum a abs :: Sum a -> Sum a $cabs :: forall a. Num a => Sum a -> Sum a negate :: Sum a -> Sum a $cnegate :: forall a. Num a => Sum a -> Sum a
- :: Sum a -> Sum a -> Sum a $c* :: forall a. Num a => Sum a -> Sum a -> Sum a
- :: Sum a -> Sum a -> Sum a $c- :: forall a. Num a => Sum a -> Sum a -> Sum a
- :: Sum a -> Sum a -> Sum a
$c+ :: forall a. Num a => Sum a -> Sum a -> Sum a
Num
)
instance Num a => Semigroup (Sum a) where <> :: Sum a -> Sum a -> Sum a (<>) = (a -> a -> a) -> Sum a -> Sum a -> Sum a coerce (a -> a -> a forall a. Num a => a -> a -> a (+) :: a -> a -> a) stimes :: forall b. Integral b => b -> Sum a -> Sum a stimes b n (Sum a a) = a -> Sum a forall a. a -> Sum a Sum (b -> a forall a b. (Integral a, Num b) => a -> b fromIntegral b n a -> a -> a forall a. Num a => a -> a -> a * a a)
instance Num a => Monoid (Sum a) where mempty :: Sum a mempty = a -> Sum a forall a. a -> Sum a Sum a 0
instance Functor Sum where fmap :: forall a b. (a -> b) -> Sum a -> Sum b fmap = (a -> b) -> Sum a -> Sum b coerce
instance Applicative Sum where pure :: forall a. a -> Sum a pure = a -> Sum a forall a. a -> Sum a Sum <*> :: forall a b. Sum (a -> b) -> Sum a -> Sum b (<*>) = Sum (a -> b) -> Sum a -> Sum b coerce
instance Monad Sum where Sum a m >>= :: forall a b. Sum a -> (a -> Sum b) -> Sum b >>= a -> Sum b k = a -> Sum b k (Sum a -> a forall a. Sum a -> a getSum Sum a m)
newtype Product a = Product { forall a. Product a -> a
getProduct :: a }
deriving ( Product a -> Product a -> Bool
(Product a -> Product a -> Bool)
-> (Product a -> Product a -> Bool) -> Eq (Product a)
forall a. Eq a => Product a -> Product a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Product a -> Product a -> Bool
$c/= :: forall a. Eq a => Product a -> Product a -> Bool
== :: Product a -> Product a -> Bool
$c== :: forall a. Eq a => Product a -> Product a -> Bool
Eq
, Eq (Product a)
Eq (Product a)
-> (Product a -> Product a -> Ordering)
-> (Product a -> Product a -> Bool)
-> (Product a -> Product a -> Bool)
-> (Product a -> Product a -> Bool)
-> (Product a -> Product a -> Bool)
-> (Product a -> Product a -> Product a)
-> (Product a -> Product a -> Product a)
-> Ord (Product a)
Product a -> Product a -> Bool
Product a -> Product a -> Ordering
Product a -> Product a -> Product 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 (Product a)
forall a. Ord a => Product a -> Product a -> Bool
forall a. Ord a => Product a -> Product a -> Ordering
forall a. Ord a => Product a -> Product a -> Product a
min :: Product a -> Product a -> Product a
$cmin :: forall a. Ord a => Product a -> Product a -> Product a
max :: Product a -> Product a -> Product a
$cmax :: forall a. Ord a => Product a -> Product a -> Product a
= :: Product a -> Product a -> Bool $c>= :: forall a. Ord a => Product a -> Product a -> Bool :: Product a -> Product a -> Bool $c> :: forall a. Ord a => Product a -> Product a -> Bool <= :: Product a -> Product a -> Bool $c<= :: forall a. Ord a => Product a -> Product a -> Bool < :: Product a -> Product a -> Bool $c< :: forall a. Ord a => Product a -> Product a -> Bool compare :: Product a -> Product a -> Ordering $ccompare :: forall a. Ord a => Product a -> Product a -> Ordering Ord
, ReadPrec [Product a] ReadPrec (Product a) Int -> ReadS (Product a) ReadS [Product a] (Int -> ReadS (Product a)) -> ReadS [Product a] -> ReadPrec (Product a) -> ReadPrec [Product a] -> Read (Product a) forall a. Read a => ReadPrec [Product a] forall a. Read a => ReadPrec (Product a) forall a. Read a => Int -> ReadS (Product a) forall a. Read a => ReadS [Product a] forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [Product a] $creadListPrec :: forall a. Read a => ReadPrec [Product a] readPrec :: ReadPrec (Product a) $creadPrec :: forall a. Read a => ReadPrec (Product a) readList :: ReadS [Product a] $creadList :: forall a. Read a => ReadS [Product a] readsPrec :: Int -> ReadS (Product a) $creadsPrec :: forall a. Read a => Int -> ReadS (Product a) Read
, Int -> Product a -> ShowS [Product a] -> ShowS Product a -> [Char] (Int -> Product a -> ShowS) -> (Product a -> [Char]) -> ([Product a] -> ShowS) -> Show (Product a) forall a. Show a => Int -> Product a -> ShowS forall a. Show a => [Product a] -> ShowS forall a. Show a => Product a -> [Char] forall a. (Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a showList :: [Product a] -> ShowS $cshowList :: forall a. Show a => [Product a] -> ShowS show :: Product a -> [Char] $cshow :: forall a. Show a => Product a -> [Char] showsPrec :: Int -> Product a -> ShowS $cshowsPrec :: forall a. Show a => Int -> Product a -> ShowS Show
, Product a Product a -> Product a -> Bounded (Product a) forall a. a -> a -> Bounded a forall a. Bounded a => Product a maxBound :: Product a $cmaxBound :: forall a. Bounded a => Product a minBound :: Product a $cminBound :: forall a. Bounded a => Product a Bounded
, (forall x. Product a -> Rep (Product a) x) -> (forall x. Rep (Product a) x -> Product a) -> Generic (Product a) forall x. Rep (Product a) x -> Product a forall x. Product a -> Rep (Product a) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall a x. Rep (Product a) x -> Product a forall a x. Product a -> Rep (Product a) x $cto :: forall a x. Rep (Product a) x -> Product a $cfrom :: forall a x. Product a -> Rep (Product a) x Generic
, (forall a. Product a -> Rep1 Product a) -> (forall a. Rep1 Product a -> Product a) -> Generic1 Product forall a. Rep1 Product a -> Product a forall a. Product a -> Rep1 Product a forall k (f :: k -> *). (forall (a :: k). f a -> Rep1 f a) -> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f $cto1 :: forall a. Rep1 Product a -> Product a $cfrom1 :: forall a. Product a -> Rep1 Product a Generic1 , Integer -> Product a Product a -> Product a Product a -> Product a -> Product a (Product a -> Product a -> Product a) -> (Product a -> Product a -> Product a) -> (Product a -> Product a -> Product a) -> (Product a -> Product a) -> (Product a -> Product a) -> (Product a -> Product a) -> (Integer -> Product a) -> Num (Product a) forall a. Num a => Integer -> Product a forall a. Num a => Product a -> Product a forall a. Num a => Product a -> Product a -> Product a forall a. (a -> a -> a) -> (a -> a -> a) -> (a -> a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (Integer -> a) -> Num a fromInteger :: Integer -> Product a $cfromInteger :: forall a. Num a => Integer -> Product a signum :: Product a -> Product a $csignum :: forall a. Num a => Product a -> Product a abs :: Product a -> Product a $cabs :: forall a. Num a => Product a -> Product a negate :: Product a -> Product a $cnegate :: forall a. Num a => Product a -> Product a
- :: Product a -> Product a -> Product a $c* :: forall a. Num a => Product a -> Product a -> Product a
- :: Product a -> Product a -> Product a $c- :: forall a. Num a => Product a -> Product a -> Product a
- :: Product a -> Product a -> Product a
$c+ :: forall a. Num a => Product a -> Product a -> Product a
Num
)
instance Num a => Semigroup (Product a) where <> :: Product a -> Product a -> Product a (<>) = (a -> a -> a) -> Product a -> Product a -> Product a coerce (a -> a -> a forall a. Num a => a -> a -> a (*) :: a -> a -> a) stimes :: forall b. Integral b => b -> Product a -> Product a stimes b n (Product a a) = a -> Product a forall a. a -> Product a Product (a a a -> b -> a forall a b. (Num a, Integral b) => a -> b -> a ^ b n)
instance Num a => Monoid (Product a) where mempty :: Product a mempty = a -> Product a forall a. a -> Product a Product a 1
instance Functor Product where fmap :: forall a b. (a -> b) -> Product a -> Product b fmap = (a -> b) -> Product a -> Product b coerce
instance Applicative Product where pure :: forall a. a -> Product a pure = a -> Product a forall a. a -> Product a Product <*> :: forall a b. Product (a -> b) -> Product a -> Product b (<*>) = Product (a -> b) -> Product a -> Product b coerce
instance Monad Product where Product a m >>= :: forall a b. Product a -> (a -> Product b) -> Product b >>= a -> Product b k = a -> Product b k (Product a -> a forall a. Product a -> a getProduct Product a m)
newtype Alt f a = Alt {forall {k} (f :: k -> *) (a :: k). Alt f a -> f a
getAlt :: f a}
deriving ( (forall x. Alt f a -> Rep (Alt f a) x)
-> (forall x. Rep (Alt f a) x -> Alt f a) -> Generic (Alt f a)
forall x. Rep (Alt f a) x -> Alt f a
forall x. Alt f a -> Rep (Alt f a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall k (f :: k -> *) (a :: k) x. Rep (Alt f a) x -> Alt f a
forall k (f :: k -> *) (a :: k) x. Alt f a -> Rep (Alt f a) x
$cto :: forall k (f :: k -> *) (a :: k) x. Rep (Alt f a) x -> Alt f a
$cfrom :: forall k (f :: k -> *) (a :: k) x. Alt f a -> Rep (Alt f a) x
Generic
, (forall (a :: k). Alt f a -> Rep1 (Alt f) a)
-> (forall (a :: k). Rep1 (Alt f) a -> Alt f a) -> Generic1 (Alt f)
forall (a :: k). Rep1 (Alt f) a -> Alt f a
forall (a :: k). Alt f a -> Rep1 (Alt f) a
forall k (f :: k -> *).
(forall (a :: k). f a -> Rep1 f a)
-> (forall (a :: k). Rep1 f a -> f a) -> Generic1 f
forall k (f :: k -> *) (a :: k). Rep1 (Alt f) a -> Alt f a
forall k (f :: k -> *) (a :: k). Alt f a -> Rep1 (Alt f) a
$cto1 :: forall k (f :: k -> *) (a :: k). Rep1 (Alt f) a -> Alt f a
$cfrom1 :: forall k (f :: k -> *) (a :: k). Alt f a -> Rep1 (Alt f) a
Generic1
, ReadPrec [Alt f a]
ReadPrec (Alt f a)
Int -> ReadS (Alt f a)
ReadS [Alt f a]
(Int -> ReadS (Alt f a))
-> ReadS [Alt f a]
-> ReadPrec (Alt f a)
-> ReadPrec [Alt f a]
-> Read (Alt f a)
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
forall k (f :: k -> *) (a :: k). Read (f a) => ReadPrec [Alt f a]
forall k (f :: k -> *) (a :: k). Read (f a) => ReadPrec (Alt f a)
forall k (f :: k -> *) (a :: k).
Read (f a) =>
Int -> ReadS (Alt f a)
forall k (f :: k -> *) (a :: k). Read (f a) => ReadS [Alt f a]
readListPrec :: ReadPrec [Alt f a]
$creadListPrec :: forall k (f :: k -> *) (a :: k). Read (f a) => ReadPrec [Alt f a]
readPrec :: ReadPrec (Alt f a)
$creadPrec :: forall k (f :: k -> *) (a :: k). Read (f a) => ReadPrec (Alt f a)
readList :: ReadS [Alt f a]
$creadList :: forall k (f :: k -> *) (a :: k). Read (f a) => ReadS [Alt f a]
readsPrec :: Int -> ReadS (Alt f a)
$creadsPrec :: forall k (f :: k -> *) (a :: k).
Read (f a) =>
Int -> ReadS (Alt f a)
Read
, Int -> Alt f a -> ShowS
[Alt f a] -> ShowS
Alt f a -> [Char]
(Int -> Alt f a -> ShowS)
-> (Alt f a -> [Char]) -> ([Alt f a] -> ShowS) -> Show (Alt f a)
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
forall k (f :: k -> *) (a :: k).
Show (f a) =>
Int -> Alt f a -> ShowS
forall k (f :: k -> *) (a :: k). Show (f a) => [Alt f a] -> ShowS
forall k (f :: k -> *) (a :: k). Show (f a) => Alt f a -> [Char]
showList :: [Alt f a] -> ShowS
$cshowList :: forall k (f :: k -> *) (a :: k). Show (f a) => [Alt f a] -> ShowS
show :: Alt f a -> [Char]
$cshow :: forall k (f :: k -> *) (a :: k). Show (f a) => Alt f a -> [Char]
showsPrec :: Int -> Alt f a -> ShowS
$cshowsPrec :: forall k (f :: k -> *) (a :: k).
Show (f a) =>
Int -> Alt f a -> ShowS
Show
, Alt f a -> Alt f a -> Bool
(Alt f a -> Alt f a -> Bool)
-> (Alt f a -> Alt f a -> Bool) -> Eq (Alt f a)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall k (f :: k -> *) (a :: k).
Eq (f a) =>
Alt f a -> Alt f a -> Bool
/= :: Alt f a -> Alt f a -> Bool
$c/= :: forall k (f :: k -> *) (a :: k).
Eq (f a) =>
Alt f a -> Alt f a -> Bool
== :: Alt f a -> Alt f a -> Bool
$c== :: forall k (f :: k -> *) (a :: k).
Eq (f a) =>
Alt f a -> Alt f a -> Bool
Eq
, Eq (Alt f a)
Eq (Alt f a)
-> (Alt f a -> Alt f a -> Ordering)
-> (Alt f a -> Alt f a -> Bool)
-> (Alt f a -> Alt f a -> Bool)
-> (Alt f a -> Alt f a -> Bool)
-> (Alt f a -> Alt f a -> Bool)
-> (Alt f a -> Alt f a -> Alt f a)
-> (Alt f a -> Alt f a -> Alt f a)
-> Ord (Alt f a)
Alt f a -> Alt f a -> Bool
Alt f a -> Alt f a -> Ordering
Alt f a -> Alt f a -> Alt f 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 {k} {f :: k -> *} {a :: k}. Ord (f a) => Eq (Alt f a)
forall k (f :: k -> *) (a :: k).
Ord (f a) =>
Alt f a -> Alt f a -> Bool
forall k (f :: k -> *) (a :: k).
Ord (f a) =>
Alt f a -> Alt f a -> Ordering
forall k (f :: k -> *) (a :: k).
Ord (f a) =>
Alt f a -> Alt f a -> Alt f a
min :: Alt f a -> Alt f a -> Alt f a
$cmin :: forall k (f :: k -> *) (a :: k).
Ord (f a) =>
Alt f a -> Alt f a -> Alt f a
max :: Alt f a -> Alt f a -> Alt f a
$cmax :: forall k (f :: k -> *) (a :: k).
Ord (f a) =>
Alt f a -> Alt f a -> Alt f a
= :: Alt f a -> Alt f a -> Bool $c>= :: forall k (f :: k -> *) (a :: k). Ord (f a) => Alt f a -> Alt f a -> Bool :: Alt f a -> Alt f a -> Bool $c> :: forall k (f :: k -> *) (a :: k). Ord (f a) => Alt f a -> Alt f a -> Bool <= :: Alt f a -> Alt f a -> Bool $c<= :: forall k (f :: k -> *) (a :: k). Ord (f a) => Alt f a -> Alt f a -> Bool < :: Alt f a -> Alt f a -> Bool $c< :: forall k (f :: k -> *) (a :: k). Ord (f a) => Alt f a -> Alt f a -> Bool compare :: Alt f a -> Alt f a -> Ordering $ccompare :: forall k (f :: k -> *) (a :: k). Ord (f a) => Alt f a -> Alt f a -> Ordering Ord
, Integer -> Alt f a Alt f a -> Alt f a Alt f a -> Alt f a -> Alt f a (Alt f a -> Alt f a -> Alt f a) -> (Alt f a -> Alt f a -> Alt f a) -> (Alt f a -> Alt f a -> Alt f a) -> (Alt f a -> Alt f a) -> (Alt f a -> Alt f a) -> (Alt f a -> Alt f a) -> (Integer -> Alt f a) -> Num (Alt f a) forall a. (a -> a -> a) -> (a -> a -> a) -> (a -> a -> a) -> (a -> a) -> (a -> a) -> (a -> a) -> (Integer -> a) -> Num a forall k (f :: k -> *) (a :: k). Num (f a) => Integer -> Alt f a forall k (f :: k -> *) (a :: k). Num (f a) => Alt f a -> Alt f a forall k (f :: k -> *) (a :: k). Num (f a) => Alt f a -> Alt f a -> Alt f a fromInteger :: Integer -> Alt f a $cfromInteger :: forall k (f :: k -> *) (a :: k). Num (f a) => Integer -> Alt f a signum :: Alt f a -> Alt f a $csignum :: forall k (f :: k -> *) (a :: k). Num (f a) => Alt f a -> Alt f a abs :: Alt f a -> Alt f a $cabs :: forall k (f :: k -> *) (a :: k). Num (f a) => Alt f a -> Alt f a negate :: Alt f a -> Alt f a $cnegate :: forall k (f :: k -> *) (a :: k). Num (f a) => Alt f a -> Alt f a
- :: Alt f a -> Alt f a -> Alt f a $c* :: forall k (f :: k -> *) (a :: k). Num (f a) => Alt f a -> Alt f a -> Alt f a
- :: Alt f a -> Alt f a -> Alt f a $c- :: forall k (f :: k -> *) (a :: k). Num (f a) => Alt f a -> Alt f a -> Alt f a
- :: Alt f a -> Alt f a -> Alt f a
$c+ :: forall k (f :: k -> *) (a :: k).
Num (f a) =>
Alt f a -> Alt f a -> Alt f a
Num
, Int -> Alt f a
Alt f a -> Int
Alt f a -> [Alt f a]
Alt f a -> Alt f a
Alt f a -> Alt f a -> [Alt f a]
Alt f a -> Alt f a -> Alt f a -> [Alt f a]
(Alt f a -> Alt f a)
-> (Alt f a -> Alt f a)
-> (Int -> Alt f a)
-> (Alt f a -> Int)
-> (Alt f a -> [Alt f a])
-> (Alt f a -> Alt f a -> [Alt f a])
-> (Alt f a -> Alt f a -> [Alt f a])
-> (Alt f a -> Alt f a -> Alt f a -> [Alt f a])
-> Enum (Alt f a)
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
forall k (f :: k -> *) (a :: k). Enum (f a) => Int -> Alt f a
forall k (f :: k -> *) (a :: k). Enum (f a) => Alt f a -> Int
forall k (f :: k -> *) (a :: k). Enum (f a) => Alt f a -> [Alt f a]
forall k (f :: k -> *) (a :: k). Enum (f a) => Alt f a -> Alt f a
forall k (f :: k -> *) (a :: k).
Enum (f a) =>
Alt f a -> Alt f a -> [Alt f a]
forall k (f :: k -> *) (a :: k).
Enum (f a) =>
Alt f a -> Alt f a -> Alt f a -> [Alt f a]
enumFromThenTo :: Alt f a -> Alt f a -> Alt f a -> [Alt f a]
$cenumFromThenTo :: forall k (f :: k -> *) (a :: k).
Enum (f a) =>
Alt f a -> Alt f a -> Alt f a -> [Alt f a]
enumFromTo :: Alt f a -> Alt f a -> [Alt f a]
$cenumFromTo :: forall k (f :: k -> *) (a :: k).
Enum (f a) =>
Alt f a -> Alt f a -> [Alt f a]
enumFromThen :: Alt f a -> Alt f a -> [Alt f a]
$cenumFromThen :: forall k (f :: k -> *) (a :: k).
Enum (f a) =>
Alt f a -> Alt f a -> [Alt f a]
enumFrom :: Alt f a -> [Alt f a]
$cenumFrom :: forall k (f :: k -> *) (a :: k). Enum (f a) => Alt f a -> [Alt f a]
fromEnum :: Alt f a -> Int
$cfromEnum :: forall k (f :: k -> *) (a :: k). Enum (f a) => Alt f a -> Int
toEnum :: Int -> Alt f a
$ctoEnum :: forall k (f :: k -> *) (a :: k). Enum (f a) => Int -> Alt f a
pred :: Alt f a -> Alt f a
$cpred :: forall k (f :: k -> *) (a :: k). Enum (f a) => Alt f a -> Alt f a
succ :: Alt f a -> Alt f a
$csucc :: forall k (f :: k -> *) (a :: k). Enum (f a) => Alt f a -> Alt f a
Enum
, Applicative (Alt f)
Applicative (Alt f)
-> (forall a b. Alt f a -> (a -> Alt f b) -> Alt f b)
-> (forall a b. Alt f a -> Alt f b -> Alt f b)
-> (forall a. a -> Alt f a)
-> Monad (Alt f)
forall a. a -> Alt f a
forall a b. Alt f a -> Alt f b -> Alt f b
forall a b. Alt f a -> (a -> Alt f b) -> Alt f b
forall {f :: * -> *}. Monad f => Applicative (Alt f)
forall (f :: * -> *) a. Monad f => a -> Alt f a
forall (f :: * -> *) a b. Monad f => Alt f a -> Alt f b -> Alt f b
forall (f :: * -> *) a b.
Monad f =>
Alt f a -> (a -> Alt f b) -> Alt f b
forall (m :: * -> *).
Applicative m
-> (forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
return :: forall a. a -> Alt f a
$creturn :: forall (f :: * -> *) a. Monad f => a -> Alt f a
:: forall a b. Alt f a -> Alt f b -> Alt f b $c>> :: forall (f :: * -> *) a b. Monad f => Alt f a -> Alt f b -> Alt f b = :: forall a b. Alt f a -> (a -> Alt f b) -> Alt f b $c>>= :: forall (f :: * -> *) a b. Monad f => Alt f a -> (a -> Alt f b) -> Alt f b Monad
, Monad (Alt f) Alternative (Alt f) Alternative (Alt f) -> Monad (Alt f) -> (forall a. Alt f a) -> (forall a. Alt f a -> Alt f a -> Alt f a) -> MonadPlus (Alt f) forall a. Alt f a forall a. Alt f a -> Alt f a -> Alt f a forall (m :: * -> *). Alternative m -> Monad m -> (forall a. m a) -> (forall a. m a -> m a -> m a) -> MonadPlus m forall {f :: * -> *}. MonadPlus f => Monad (Alt f) forall {f :: * -> *}. MonadPlus f => Alternative (Alt f) forall (f :: * -> *) a. MonadPlus f => Alt f a forall (f :: * -> *) a. MonadPlus f => Alt f a -> Alt f a -> Alt f a mplus :: forall a. Alt f a -> Alt f a -> Alt f a $cmplus :: forall (f :: * -> *) a. MonadPlus f => Alt f a -> Alt f a -> Alt f a mzero :: forall a. Alt f a $cmzero :: forall (f :: * -> *) a. MonadPlus f => Alt f a MonadPlus
, Functor (Alt f) Functor (Alt f) -> (forall a. a -> Alt f a) -> (forall a b. Alt f (a -> b) -> Alt f a -> Alt f b) -> (forall a b c. (a -> b -> c) -> Alt f a -> Alt f b -> Alt f c) -> (forall a b. Alt f a -> Alt f b -> Alt f b) -> (forall a b. Alt f a -> Alt f b -> Alt f a) -> Applicative (Alt f) forall a. a -> Alt f a forall a b. Alt f a -> Alt f b -> Alt f a forall a b. Alt f a -> Alt f b -> Alt f b forall a b. Alt f (a -> b) -> Alt f a -> Alt f b forall a b c. (a -> b -> c) -> Alt f a -> Alt f b -> Alt f c forall (f :: * -> *). Functor f -> (forall a. a -> f a) -> (forall a b. f (a -> b) -> f a -> f b) -> (forall a b c. (a -> b -> c) -> f a -> f b -> f c) -> (forall a b. f a -> f b -> f b) -> (forall a b. f a -> f b -> f a) -> Applicative f forall {f :: * -> *}. Applicative f => Functor (Alt f) forall (f :: * -> *) a. Applicative f => a -> Alt f a forall (f :: * -> *) a b. Applicative f => Alt f a -> Alt f b -> Alt f a forall (f :: * -> *) a b. Applicative f => Alt f a -> Alt f b -> Alt f b forall (f :: * -> *) a b. Applicative f => Alt f (a -> b) -> Alt f a -> Alt f b forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> Alt f a -> Alt f b -> Alt f c <* :: forall a b. Alt f a -> Alt f b -> Alt f a $c<* :: forall (f :: * -> *) a b. Applicative f => Alt f a -> Alt f b -> Alt f a > :: forall a b. Alt f a -> Alt f b -> Alt f b $c> :: forall (f :: * -> *) a b. Applicative f => Alt f a -> Alt f b -> Alt f b liftA2 :: forall a b c. (a -> b -> c) -> Alt f a -> Alt f b -> Alt f c $cliftA2 :: forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> Alt f a -> Alt f b -> Alt f c <*> :: forall a b. Alt f (a -> b) -> Alt f a -> Alt f b $c<*> :: forall (f :: * -> *) a b. Applicative f => Alt f (a -> b) -> Alt f a -> Alt f b pure :: forall a. a -> Alt f a $cpure :: forall (f :: * -> *) a. Applicative f => a -> Alt f a Applicative , Applicative (Alt f) Applicative (Alt f) -> (forall a. Alt f a) -> (forall a. Alt f a -> Alt f a -> Alt f a) -> (forall a. Alt f a -> Alt f [a]) -> (forall a. Alt f a -> Alt f [a]) -> Alternative (Alt f) forall a. Alt f a forall a. Alt f a -> Alt f [a] forall a. Alt f a -> Alt f a -> Alt f a forall (f :: * -> *). Applicative f -> (forall a. f a) -> (forall a. f a -> f a -> f a) -> (forall a. f a -> f [a]) -> (forall a. f a -> f [a]) -> Alternative f forall {f :: * -> *}. Alternative f => Applicative (Alt f) forall (f :: * -> *) a. Alternative f => Alt f a forall (f :: * -> *) a. Alternative f => Alt f a -> Alt f [a] forall (f :: * -> *) a. Alternative f => Alt f a -> Alt f a -> Alt f a many :: forall a. Alt f a -> Alt f [a] $cmany :: forall (f :: * -> *) a. Alternative f => Alt f a -> Alt f [a] some :: forall a. Alt f a -> Alt f [a] $csome :: forall (f :: * -> *) a. Alternative f => Alt f a -> Alt f [a] <|> :: forall a. Alt f a -> Alt f a -> Alt f a $c<|> :: forall (f :: * -> *) a. Alternative f => Alt f a -> Alt f a -> Alt f a empty :: forall a. Alt f a $cempty :: forall (f :: * -> *) a. Alternative f => Alt f a Alternative , (forall a b. (a -> b) -> Alt f a -> Alt f b) -> (forall a b. a -> Alt f b -> Alt f a) -> Functor (Alt f) forall a b. a -> Alt f b -> Alt f a forall a b. (a -> b) -> Alt f a -> Alt f b forall (f :: * -> *) a b. Functor f => a -> Alt f b -> Alt f a forall (f :: * -> *) a b. Functor f => (a -> b) -> Alt f a -> Alt f b forall (f :: * -> *). (forall a b. (a -> b) -> f a -> f b) -> (forall a b. a -> f b -> f a) -> Functor f <$ :: forall a b. a -> Alt f b -> Alt f a c<c<c< :: forall (f :: * -> *) a b. Functor f => a -> Alt f b -> Alt f a fmap :: forall a b. (a -> b) -> Alt f a -> Alt f b $cfmap :: forall (f :: * -> *) a b. Functor f => (a -> b) -> Alt f a -> Alt f b Functor
)
instance Alternative f => Semigroup (Alt f a) where <> :: Alt f a -> Alt f a -> Alt f a (<>) = (f a -> f a -> f a) -> Alt f a -> Alt f a -> Alt f a coerce (f a -> f a -> f a forall (f :: * -> *) a. Alternative f => f a -> f a -> f a (<|>) :: f a -> f a -> f a) stimes :: forall b. Integral b => b -> Alt f a -> Alt f a stimes = b -> Alt f a -> Alt f a forall b a. (Integral b, Monoid a) => b -> a -> a stimesMonoid
instance Alternative f => Monoid (Alt f a) where mempty :: Alt f a mempty = f a -> Alt f a forall {k} (f :: k -> *) (a :: k). f a -> Alt f a Alt f a forall (f :: * -> *) a. Alternative f => f a empty