(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

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

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 -> 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