module Data.Edison.Seq.MyersStack (
Seq,
empty,singleton,lcons,rcons,append,lview,lhead,ltail,rview,rhead,rtail,
lheadM,ltailM,rheadM,rtailM,
null,size,concat,reverse,reverseOnto,fromList,toList,map,concatMap,
fold,fold',fold1,fold1',foldr,foldr',foldl,foldl',foldr1,foldr1',foldl1,foldl1',
reducer,reducer',reducel,reducel',reduce1,reduce1',
copy,inBounds,lookup,lookupM,lookupWithDefault,update,adjust,
mapWithIndex,foldrWithIndex,foldrWithIndex',foldlWithIndex,foldlWithIndex',
take,drop,splitAt,subseq,filter,partition,takeWhile,dropWhile,splitWhile,
zip,zip3,zipWith,zipWith3,unzip,unzip3,unzipWith,unzipWith3,
strict, strictWith,
structuralInvariant,
moduleName
) where
import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
filter,takeWhile,dropWhile,lookup,take,drop,splitAt,
zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
import qualified Control.Applicative as App
import Data.Edison.Prelude ( runFail_ )
import qualified Data.Edison.Seq as S ( Sequence(..) )
import Data.Edison.Seq.Defaults
import qualified Control.Monad.Fail as Fail
import Control.Monad
import Data.Monoid
import Data.Semigroup as SG
import Test.QuickCheck
moduleName :: String
empty :: Seq a
singleton :: a -> Seq a
lcons :: a -> Seq a -> Seq a
rcons :: a -> Seq a -> Seq a
append :: Seq a -> Seq a -> Seq a
lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
lhead :: Seq a -> a
lheadM :: (Fail.MonadFail m) => Seq a -> m a
ltail :: Seq a -> Seq a
ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
rhead :: Seq a -> a
rheadM :: (Fail.MonadFail m) => Seq a -> m a
rtail :: Seq a -> Seq a
rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
null :: Seq a -> Bool
size :: Seq a -> Int
concat :: Seq (Seq a) -> Seq a
reverse :: Seq a -> Seq a
reverseOnto :: Seq a -> Seq a -> Seq a
fromList :: [a] -> Seq a
toList :: Seq a -> [a]
map :: (a -> b) -> Seq a -> Seq b
concatMap :: (a -> Seq b) -> Seq a -> Seq b
fold :: (a -> b -> b) -> b -> Seq a -> b
fold' :: (a -> b -> b) -> b -> Seq a -> b
fold1 :: (a -> a -> a) -> Seq a -> a
fold1' :: (a -> a -> a) -> Seq a -> a
foldr :: (a -> b -> b) -> b -> Seq a -> b
foldl :: (b -> a -> b) -> b -> Seq a -> b
foldr1 :: (a -> a -> a) -> Seq a -> a
foldl1 :: (a -> a -> a) -> Seq a -> a
reducer :: (a -> a -> a) -> a -> Seq a -> a
reducel :: (a -> a -> a) -> a -> Seq a -> a
reduce1 :: (a -> a -> a) -> Seq a -> a
foldr' :: (a -> b -> b) -> b -> Seq a -> b
foldl' :: (b -> a -> b) -> b -> Seq a -> b
foldr1' :: (a -> a -> a) -> Seq a -> a
foldl1' :: (a -> a -> a) -> Seq a -> a
reducer' :: (a -> a -> a) -> a -> Seq a -> a
reducel' :: (a -> a -> a) -> a -> Seq a -> a
reduce1' :: (a -> a -> a) -> Seq a -> a
copy :: Int -> a -> Seq a
inBounds :: Int -> Seq a -> Bool
lookup :: Int -> Seq a -> a
lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
lookupWithDefault :: a -> Int -> Seq a -> a
update :: Int -> a -> Seq a -> Seq a
adjust :: (a -> a) -> Int -> Seq a -> Seq a
mapWithIndex :: (Int -> a -> b) -> Seq a -> Seq b
foldrWithIndex :: (Int -> a -> b -> b) -> b -> Seq a -> b
foldlWithIndex :: (b -> Int -> a -> b) -> b -> Seq a -> b
foldrWithIndex' :: (Int -> a -> b -> b) -> b -> Seq a -> b
foldlWithIndex' :: (b -> Int -> a -> b) -> b -> Seq a -> b
take :: Int -> Seq a -> Seq a
drop :: Int -> Seq a -> Seq a
splitAt :: Int -> Seq a -> (Seq a, Seq a)
subseq :: Int -> Int -> Seq a -> Seq a
filter :: (a -> Bool) -> Seq a -> Seq a
partition :: (a -> Bool) -> Seq a -> (Seq a, Seq a)
takeWhile :: (a -> Bool) -> Seq a -> Seq a
dropWhile :: (a -> Bool) -> Seq a -> Seq a
splitWhile :: (a -> Bool) -> Seq a -> (Seq a, Seq a)
zip :: Seq a -> Seq b -> Seq (a,b)
zip3 :: Seq a -> Seq b -> Seq c -> Seq (a,b,c)
zipWith :: (a -> b -> c) -> Seq a -> Seq b -> Seq c
zipWith3 :: (a -> b -> c -> d) -> Seq a -> Seq b -> Seq c -> Seq d
unzip :: Seq (a,b) -> (Seq a, Seq b)
unzip3 :: Seq (a,b,c) -> (Seq a, Seq b, Seq c)
unzipWith :: (a -> b) -> (a -> c) -> Seq a -> (Seq b, Seq c)
unzipWith3 :: (a -> b) -> (a -> c) -> (a -> d) -> Seq a -> (Seq b, Seq c, Seq d)
strict :: Seq a -> Seq a
strictWith :: (a -> b) -> Seq a -> Seq a
structuralInvariant :: Seq a -> Bool
moduleName :: String
moduleName = String
"Data.Edison.Seq.MyersStack"
data Seq a = E | C !Int a (Seq a) (Seq a)
jump :: Seq t -> Seq t
jump :: forall t. Seq t -> Seq t
jump (C Int
_ t
_ Seq t
_ (C Int
_ t
_ Seq t
_ Seq t
xs')) = Seq t
xs'
jump Seq t
_ = forall a. HasCallStack => String -> a
error String
"MyersStack.jump: bug!"
empty :: forall a. Seq a
empty = forall a. Seq a
E
singleton :: forall a. a -> Seq a
singleton a
x = forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
1 a
x forall a. Seq a
E forall a. Seq a
E
lcons :: forall a. a -> Seq a -> Seq a
lcons a
x xs :: Seq a
xs@(C Int
i a
_ Seq a
_ (C Int
j a
_ Seq a
_ Seq a
xs'))
| Int
i forall a. Eq a => a -> a -> Bool
== Int
j = forall a. Int -> a -> Seq a -> Seq a -> Seq a
C (Int
1 forall a. Num a => a -> a -> a
+ Int
i forall a. Num a => a -> a -> a
+ Int
j) a
x Seq a
xs Seq a
xs'
lcons a
x Seq a
xs = forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
1 a
x Seq a
xs Seq a
xs
lview :: forall (m :: * -> *) a. MonadFail m => Seq a -> m (a, Seq a)
lview Seq a
E = forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"MyersStack.lview: empty sequence"
lview (C Int
_ a
x Seq a
xs Seq a
_) = forall (m :: * -> *) a. Monad m => a -> m a
return (a
x, Seq a
xs)
lhead :: forall a. Seq a -> a
lhead Seq a
E = forall a. HasCallStack => String -> a
error String
"MyersStack.lhead: empty sequence"
lhead (C Int
_ a
x Seq a
_ Seq a
_) = a
x
lheadM :: forall (m :: * -> *) a. MonadFail m => Seq a -> m a
lheadM Seq a
E = forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"MyersStack.lheadM: empty sequence"
lheadM (C Int
_ a
x Seq a
_ Seq a
_) = forall (m :: * -> *) a. Monad m => a -> m a
return a
x
ltail :: forall t. Seq t -> Seq t
ltail Seq a
E = forall a. HasCallStack => String -> a
error String
"MyersStack.ltail: empty sequence"
ltail (C Int
_ a
_ Seq a
xs Seq a
_) = Seq a
xs
ltailM :: forall (m :: * -> *) a. MonadFail m => Seq a -> m (Seq a)
ltailM Seq a
E = forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"MyersStack.ltailM: empty sequence"
ltailM (C Int
_ a
_ Seq a
xs Seq a
_) = forall (m :: * -> *) a. Monad m => a -> m a
return Seq a
xs
rview :: forall (m :: * -> *) a. MonadFail m => Seq a -> m (a, Seq a)
rview Seq a
E = forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"MyersStack.rview: empty sequence"
rview Seq a
xs = forall (m :: * -> *) a. Monad m => a -> m a
return (forall a. Seq a -> a
rhead Seq a
xs, forall t. Seq t -> Seq t
rtail Seq a
xs)
rhead :: forall a. Seq a -> a
rhead Seq a
E = forall a. HasCallStack => String -> a
error String
"MyersStack.rhead: empty sequence"
rhead (C Int
_ a
x Seq a
xs Seq a
xs') = forall {t}. t -> Seq t -> Seq t -> t
rh a
x Seq a
xs Seq a
xs'
where rh :: t -> Seq t -> Seq t -> t
rh t
_ Seq t
_ (C Int
_ t
y Seq t
ys Seq t
ys') = t -> Seq t -> Seq t -> t
rh t
y Seq t
ys Seq t
ys'
rh t
_ (C Int
_ t
y Seq t
ys Seq t
ys') Seq t
E = t -> Seq t -> Seq t -> t
rh t
y Seq t
ys Seq t
ys'
rh t
x Seq t
E Seq t
E = t
x
rheadM :: forall (m :: * -> *) a. MonadFail m => Seq a -> m a
rheadM Seq a
E = forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"MyersStack.rheadM: empty sequence"
rheadM (C Int
_ a
x Seq a
xs Seq a
xs') = forall (m :: * -> *) a. Monad m => a -> m a
return (forall {t}. t -> Seq t -> Seq t -> t
rh a
x Seq a
xs Seq a
xs')
where rh :: t -> Seq t -> Seq t -> t
rh t
_ Seq t
_ (C Int
_ t
y Seq t
ys Seq t
ys') = t -> Seq t -> Seq t -> t
rh t
y Seq t
ys Seq t
ys'
rh t
_ (C Int
_ t
y Seq t
ys Seq t
ys') Seq t
E = t -> Seq t -> Seq t -> t
rh t
y Seq t
ys Seq t
ys'
rh t
x Seq t
E Seq t
E = t
x
rtail :: forall t. Seq t -> Seq t
rtail Seq a
E = forall a. HasCallStack => String -> a
error String
"MyersStack.rtail: empty sequence"
rtail (C Int
_ a
x Seq a
xs Seq a
_) = forall a. a -> Seq a -> Seq a
rt a
x Seq a
xs
where rt :: t -> Seq t -> Seq t
rt t
_ Seq t
E = forall a. Seq a
E
rt t
y (C Int
_ t
x Seq t
xs Seq t
_) = forall a. a -> Seq a -> Seq a
lcons t
y (t -> Seq t -> Seq t
rt t
x Seq t
xs)
rtailM :: forall (m :: * -> *) a. MonadFail m => Seq a -> m (Seq a)
rtailM Seq a
E = forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"MyersStack.rtailM: empty sequence"
rtailM (C Int
_ a
x Seq a
xs Seq a
_) = forall (m :: * -> *) a. Monad m => a -> m a
return (forall a. a -> Seq a -> Seq a
rt a
x Seq a
xs)
where rt :: t -> Seq t -> Seq t
rt t
_ Seq t
E = forall a. Seq a
E
rt t
y (C Int
_ t
x Seq t
xs Seq t
_) = forall a. a -> Seq a -> Seq a
lcons t
y (t -> Seq t -> Seq t
rt t
x Seq t
xs)
null :: forall a. Seq a -> Bool
null Seq a
E = Bool
True
null Seq a
_ = Bool
False
size :: forall a. Seq a -> Int
size Seq a
xs = forall a. Seq a -> Int
go Seq a
xs
where go :: Seq a -> Int
go Seq a
E = (Int
0::Int)
go (C Int
j a
_ Seq a
_ Seq a
xs') = Int
j forall a. Num a => a -> a -> a
+ forall a. Seq a -> Int
size Seq a
xs'
reverseOnto :: forall a. Seq a -> Seq a -> Seq a
reverseOnto Seq a
E Seq a
ys = Seq a
ys
reverseOnto (C Int
_ a
x Seq a
xs Seq a
_) Seq a
ys = forall a. Seq a -> Seq a -> Seq a
reverseOnto Seq a
xs (forall a. a -> Seq a -> Seq a
lcons a
x Seq a
ys)
map :: forall a b. (a -> b) -> Seq a -> Seq b
map a -> b
_ Seq a
E = forall a. Seq a
E
map a -> b
f (C Int
j a
x Seq a
xs Seq a
_')
| Int
j forall a. Eq a => a -> a -> Bool
== Int
1 = forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j (a -> b
f a
x) Seq b
ys Seq b
ys
| Bool
otherwise = forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j (a -> b
f a
x) Seq b
ys (forall t. Seq t -> Seq t
jump Seq b
ys)
where ys :: Seq b
ys = forall a b. (a -> b) -> Seq a -> Seq b
map a -> b
f Seq a
xs
fold :: forall a b. (a -> b -> b) -> b -> Seq a -> b
fold = forall a b. (a -> b -> b) -> b -> Seq a -> b
foldr
fold' :: forall a b. (a -> b -> b) -> b -> Seq a -> b
fold' a -> b -> b
f = forall b a. (b -> a -> b) -> b -> Seq a -> b
foldl' (forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> b -> b
f)
fold1 :: forall a. (a -> a -> a) -> Seq a -> a
fold1 = forall (s :: * -> *) a. Sequence s => (a -> a -> a) -> s a -> a
fold1UsingFold
fold1' :: forall a. (a -> a -> a) -> Seq a -> a
fold1' = forall (s :: * -> *) a. Sequence s => (a -> a -> a) -> s a -> a
fold1'UsingFold'
foldr :: forall a b. (a -> b -> b) -> b -> Seq a -> b
foldr a -> b -> b
_ b
e Seq a
E = b
e
foldr a -> b -> b
f b
e (C Int
_ a
x Seq a
xs Seq a
_) = a -> b -> b
f a
x (forall a b. (a -> b -> b) -> b -> Seq a -> b
foldr a -> b -> b
f b
e Seq a
xs)
foldr' :: forall a b. (a -> b -> b) -> b -> Seq a -> b
foldr' a -> b -> b
_ b
e Seq a
E = b
e
foldr' a -> b -> b
f b
e (C Int
_ a
x Seq a
xs Seq a
_) = a -> b -> b
f a
x forall a b. (a -> b) -> a -> b
$! (forall a b. (a -> b -> b) -> b -> Seq a -> b
foldr' a -> b -> b
f b
e Seq a
xs)
foldl :: forall b a. (b -> a -> b) -> b -> Seq a -> b
foldl b -> a -> b
_ b
e Seq a
E = b
e
foldl b -> a -> b
f b
e (C Int
_ a
x Seq a
xs Seq a
_) = forall b a. (b -> a -> b) -> b -> Seq a -> b
foldl b -> a -> b
f (b -> a -> b
f b
e a
x) Seq a
xs
foldl' :: forall b a. (b -> a -> b) -> b -> Seq a -> b
foldl' b -> a -> b
_ b
e Seq a
E = b
e
foldl' b -> a -> b
f b
e (C Int
_ a
x Seq a
xs Seq a
_) = b
e seq :: forall a b. a -> b -> b
`seq` forall b a. (b -> a -> b) -> b -> Seq a -> b
foldl' b -> a -> b
f (b -> a -> b
f b
e a
x) Seq a
xs
foldr1 :: forall a. (a -> a -> a) -> Seq a -> a
foldr1 a -> a -> a
_ Seq a
E = forall a. HasCallStack => String -> a
error String
"MyersStack.foldr1: empty sequence"
foldr1 a -> a -> a
f (C Int
_ a
x Seq a
xs Seq a
_) = a -> Seq a -> a
fr a
x Seq a
xs
where fr :: a -> Seq a -> a
fr a
y Seq a
E = a
y
fr a
y (C Int
_ a
x Seq a
xs Seq a
_) = a -> a -> a
f a
y (a -> Seq a -> a
fr a
x Seq a
xs)
foldr1' :: forall a. (a -> a -> a) -> Seq a -> a
foldr1' a -> a -> a
_ Seq a
E = forall a. HasCallStack => String -> a
error String
"MyersStack.foldr1': empty sequence"
foldr1' a -> a -> a
f (C Int
_ a
x Seq a
xs Seq a
_) = a -> Seq a -> a
fr a
x Seq a
xs
where fr :: a -> Seq a -> a
fr a
y Seq a
E = a
y
fr a
y (C Int
_ a
x Seq a
xs Seq a
_) = a -> a -> a
f a
y forall a b. (a -> b) -> a -> b
$! (a -> Seq a -> a
fr a
x Seq a
xs)
foldl1 :: forall a. (a -> a -> a) -> Seq a -> a
foldl1 a -> a -> a
_ Seq a
E = forall a. HasCallStack => String -> a
error String
"MyersStack.foldl1: empty sequence"
foldl1 a -> a -> a
f (C Int
_ a
x Seq a
xs Seq a
_) = forall b a. (b -> a -> b) -> b -> Seq a -> b
foldl a -> a -> a
f a
x Seq a
xs
foldl1' :: forall a. (a -> a -> a) -> Seq a -> a
foldl1' a -> a -> a
_ Seq a
E = forall a. HasCallStack => String -> a
error String
"MyersStack.foldl1': empty sequence"
foldl1' a -> a -> a
f (C Int
_ a
x Seq a
xs Seq a
_ ) = forall b a. (b -> a -> b) -> b -> Seq a -> b
foldl' a -> a -> a
f a
x Seq a
xs
inBounds :: forall a. Int -> Seq a -> Bool
inBounds Int
i Seq a
xs = forall {a}. Seq a -> Int -> Bool
inb Seq a
xs Int
i
where inb :: Seq a -> Int -> Bool
inb Seq a
E Int
_ = Bool
False
inb (C Int
j a
_ Seq a
_ Seq a
xs') Int
i
| Int
i forall a. Ord a => a -> a -> Bool
< Int
j = (Int
i forall a. Ord a => a -> a -> Bool
>= Int
0)
| Bool
otherwise = Seq a -> Int -> Bool
inb Seq a
xs' (Int
i forall a. Num a => a -> a -> a
- Int
j)
lookup :: forall a. Int -> Seq a -> a
lookup Int
i Seq a
xs = forall a. Fail a -> a
runFail_ (forall (m :: * -> *) a. MonadFail m => Int -> Seq a -> m a
lookupM Int
i Seq a
xs)
lookupM :: forall (m :: * -> *) a. MonadFail m => Int -> Seq a -> m a
lookupM Int
i Seq a
xs = forall {a}. Seq a -> Int -> m a
look Seq a
xs Int
i
where look :: Seq a -> Int -> m a
look Seq a
E Int
_ = forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"MyersStack.lookup: bad subscript"
look (C Int
j a
x Seq a
xs Seq a
xs') Int
i
| Int
i forall a. Ord a => a -> a -> Bool
>= Int
j = Seq a -> Int -> m a
look Seq a
xs' (Int
i forall a. Num a => a -> a -> a
- Int
j)
| Int
i forall a. Ord a => a -> a -> Bool
> Int
0 = Seq a -> Int -> m a
look Seq a
xs (Int
i forall a. Num a => a -> a -> a
- Int
1)
| Int
i forall a. Eq a => a -> a -> Bool
== Int
0 = forall (m :: * -> *) a. Monad m => a -> m a
return a
x
| Bool
otherwise = forall {a}. m a
nothing
nothing :: m a
nothing = forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"MyersStack.lookup: not found"
lookupWithDefault :: forall a. a -> Int -> Seq a -> a
lookupWithDefault a
d Int
i Seq a
xs = Seq a -> Int -> a
look Seq a
xs Int
i
where look :: Seq a -> Int -> a
look Seq a
E Int
_ = a
d
look (C Int
j a
x Seq a
xs Seq a
xs') Int
i
| Int
i forall a. Ord a => a -> a -> Bool
>= Int
j = Seq a -> Int -> a
look Seq a
xs' (Int
i forall a. Num a => a -> a -> a
- Int
j)
| Int
i forall a. Ord a => a -> a -> Bool
> Int
0 = Seq a -> Int -> a
look Seq a
xs (Int
i forall a. Num a => a -> a -> a
- Int
1)
| Int
i forall a. Eq a => a -> a -> Bool
== Int
0 = a
x
| Bool
otherwise = a
d
update :: forall a. Int -> a -> Seq a -> Seq a
update Int
i a
y Seq a
xs = forall {p}. (Eq p, Num p) => p -> Seq a -> Seq a
upd Int
i Seq a
xs
where upd :: p -> Seq a -> Seq a
upd p
_ Seq a
E = forall a. Seq a
E
upd p
0 (C Int
j a
_ Seq a
xs Seq a
xs') = forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j a
y Seq a
xs Seq a
xs'
upd p
i (C Int
j a
x Seq a
xs Seq a
_)
| Int
j forall a. Eq a => a -> a -> Bool
== Int
1 = forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j a
x Seq a
ys Seq a
ys
| Bool
otherwise = forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j a
x Seq a
ys (forall t. Seq t -> Seq t
jump Seq a
ys)
where ys :: Seq a
ys = p -> Seq a -> Seq a
upd (p
i forall a. Num a => a -> a -> a
- p
1) Seq a
xs
adjust :: forall a. (a -> a) -> Int -> Seq a -> Seq a
adjust a -> a
f Int
i Seq a
xs = Int -> Seq a -> Seq a
adj Int
i Seq a
xs
where adj :: Int -> Seq a -> Seq a
adj Int
_ Seq a
E = forall a. Seq a
E
adj Int
0 (C Int
j a
x Seq a
xs Seq a
xs') = forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j (a -> a
f a
x) Seq a
xs Seq a
xs'
adj Int
i (C Int
j a
x Seq a
xs Seq a
_)
| Int
j forall a. Eq a => a -> a -> Bool
== Int
1 = forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j a
x Seq a
ys Seq a
ys
| Bool
otherwise = forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j a
x Seq a
ys (forall t. Seq t -> Seq t
jump Seq a
ys)
where ys :: Seq a
ys = Int -> Seq a -> Seq a
adj (Int
i forall a. Num a => a -> a -> a
- (Int
1::Int)) Seq a
xs
drop :: forall a. Int -> Seq a -> Seq a
drop Int
n Seq a
xs = forall a. Int -> Seq a -> Seq a
drp Int
n Seq a
xs
where drp :: Int -> Seq a -> Seq a
drp Int
n Seq a
xs | Int
n forall a. Ord a => a -> a -> Bool
<= Int
0 = Seq a
xs
drp Int
_ Seq a
E = forall a. Seq a
E
drp Int
n (C Int
j a
_ Seq a
xs Seq a
xs')
| Int
n forall a. Ord a => a -> a -> Bool
< Int
j = Int -> Seq a -> Seq a
drp (Int
n forall a. Num a => a -> a -> a
- Int
1) Seq a
xs
| Bool
otherwise = Int -> Seq a -> Seq a
drp (Int
n forall a. Num a => a -> a -> a
- Int
j) Seq a
xs'
unzip :: forall a b. Seq (a, b) -> (Seq a, Seq b)
unzip Seq (a, b)
E = (forall a. Seq a
E, forall a. Seq a
E)
unzip (C Int
j (a
x,b
y) Seq (a, b)
ps Seq (a, b)
_')
| Int
j forall a. Eq a => a -> a -> Bool
== Int
1 = (forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j a
x Seq a
xs Seq a
xs, forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j b
y Seq b
ys Seq b
ys)
| Bool
otherwise = (forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j a
x Seq a
xs (forall t. Seq t -> Seq t
jump Seq a
xs), forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j b
y Seq b
ys (forall t. Seq t -> Seq t
jump Seq b
ys))
where (Seq a
xs,Seq b
ys) = forall a b. Seq (a, b) -> (Seq a, Seq b)
unzip Seq (a, b)
ps
unzip3 :: forall a b c. Seq (a, b, c) -> (Seq a, Seq b, Seq c)
unzip3 Seq (a, b, c)
E = (forall a. Seq a
E, forall a. Seq a
E, forall a. Seq a
E)
unzip3 (C Int
j (a
x,b
y,c
z) Seq (a, b, c)
ts Seq (a, b, c)
_')
| Int
j forall a. Eq a => a -> a -> Bool
== Int
1 = (forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j a
x Seq a
xs Seq a
xs, forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j b
y Seq b
ys Seq b
ys, forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j c
z Seq c
zs Seq c
zs)
| Bool
otherwise = (forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j a
x Seq a
xs (forall t. Seq t -> Seq t
jump Seq a
xs), forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j b
y Seq b
ys (forall t. Seq t -> Seq t
jump Seq b
ys), forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j c
z Seq c
zs (forall t. Seq t -> Seq t
jump Seq c
zs))
where (Seq a
xs,Seq b
ys,Seq c
zs) = forall a b c. Seq (a, b, c) -> (Seq a, Seq b, Seq c)
unzip3 Seq (a, b, c)
ts
unzipWith :: forall a b c. (a -> b) -> (a -> c) -> Seq a -> (Seq b, Seq c)
unzipWith a -> b
_ a -> c
_ Seq a
E = (forall a. Seq a
E, forall a. Seq a
E)
unzipWith a -> b
f a -> c
g (C Int
j a
x Seq a
xs Seq a
_)
| Int
j forall a. Eq a => a -> a -> Bool
== Int
1 = (forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j (a -> b
f a
x) Seq b
as Seq b
as, forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j (a -> c
g a
x) Seq c
bs Seq c
bs)
| Bool
otherwise = (forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j (a -> b
f a
x) Seq b
as (forall t. Seq t -> Seq t
jump Seq b
as), forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j (a -> c
g a
x) Seq c
bs (forall t. Seq t -> Seq t
jump Seq c
bs))
where (Seq b
as,Seq c
bs) = forall a b c. (a -> b) -> (a -> c) -> Seq a -> (Seq b, Seq c)
unzipWith a -> b
f a -> c
g Seq a
xs
unzipWith3 :: forall a b c d.
(a -> b) -> (a -> c) -> (a -> d) -> Seq a -> (Seq b, Seq c, Seq d)
unzipWith3 a -> b
_ a -> c
_ a -> d
_ Seq a
E = (forall a. Seq a
E, forall a. Seq a
E, forall a. Seq a
E)
unzipWith3 a -> b
f a -> c
g a -> d
h (C Int
j a
x Seq a
xs Seq a
_)
| Int
j forall a. Eq a => a -> a -> Bool
== Int
1 = (forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j (a -> b
f a
x) Seq b
as Seq b
as, forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j (a -> c
g a
x) Seq c
bs Seq c
bs, forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j (a -> d
h a
x) Seq d
cs Seq d
cs)
| Bool
otherwise = (forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j (a -> b
f a
x) Seq b
as (forall t. Seq t -> Seq t
jump Seq b
as), forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j (a -> c
g a
x) Seq c
bs (forall t. Seq t -> Seq t
jump Seq c
bs),
forall a. Int -> a -> Seq a -> Seq a -> Seq a
C Int
j (a -> d
h a
x) Seq d
cs (forall t. Seq t -> Seq t
jump Seq d
cs))
where (Seq b
as,Seq c
bs,Seq d
cs) = forall a b c d.
(a -> b) -> (a -> c) -> (a -> d) -> Seq a -> (Seq b, Seq c, Seq d)
unzipWith3 a -> b
f a -> c
g a -> d
h Seq a
xs
strict :: forall t. Seq t -> Seq t
strict s :: Seq a
s@Seq a
E = Seq a
s
strict s :: Seq a
s@(C Int
_ a
_ Seq a
xs Seq a
_) = forall t. Seq t -> Seq t
strict Seq a
xs seq :: forall a b. a -> b -> b
`seq` Seq a
s
strictWith :: forall a b. (a -> b) -> Seq a -> Seq a
strictWith a -> b
_ s :: Seq a
s@Seq a
E = Seq a
s
strictWith a -> b
f s :: Seq a
s@(C Int
_ a
x Seq a
xs Seq a
_) = a -> b
f a
x seq :: forall a b. a -> b -> b
`seq` forall a b. (a -> b) -> Seq a -> Seq a
strictWith a -> b
f Seq a
xs seq :: forall a b. a -> b -> b
`seq` Seq a
s
rcons :: forall a. a -> Seq a -> Seq a
rcons = forall (s :: * -> *) a. Sequence s => a -> s a -> s a
rconsUsingFoldr
append :: forall a. Seq a -> Seq a -> Seq a
append = forall (s :: * -> *) a. Sequence s => s a -> s a -> s a
appendUsingFoldr
concat :: forall a. Seq (Seq a) -> Seq a
concat = forall (s :: * -> *) a. Sequence s => s (s a) -> s a
concatUsingFoldr
reverse :: forall t. Seq t -> Seq t
reverse = forall (s :: * -> *) a. Sequence s => s a -> s a
reverseUsingReverseOnto
fromList :: forall a. [a] -> Seq a
fromList = forall (s :: * -> *) a. Sequence s => [a] -> s a
fromListUsingCons
toList :: forall a. Seq a -> [a]
toList = forall (s :: * -> *) a. Sequence s => s a -> [a]
toListUsingFoldr
concatMap :: forall a b. (a -> Seq b) -> Seq a -> Seq b
concatMap = forall (s :: * -> *) a b. Sequence s => (a -> s b) -> s a -> s b
concatMapUsingFoldr
reducer :: forall a. (a -> a -> a) -> a -> Seq a -> a
reducer = forall (s :: * -> *) a.
Sequence s =>
(a -> a -> a) -> a -> s a -> a
reducerUsingReduce1
reducer' :: forall a. (a -> a -> a) -> a -> Seq a -> a
reducer' = forall (s :: * -> *) a.
Sequence s =>
(a -> a -> a) -> a -> s a -> a
reducer'UsingReduce1'
reducel :: forall a. (a -> a -> a) -> a -> Seq a -> a
reducel = forall (s :: * -> *) a.
Sequence s =>
(a -> a -> a) -> a -> s a -> a
reducelUsingReduce1
reducel' :: forall a. (a -> a -> a) -> a -> Seq a -> a
reducel' = forall (s :: * -> *) a.
Sequence s =>
(a -> a -> a) -> a -> s a -> a
reducel'UsingReduce1'
reduce1 :: forall a. (a -> a -> a) -> Seq a -> a
reduce1 = forall (s :: * -> *) a. Sequence s => (a -> a -> a) -> s a -> a
reduce1UsingLists
reduce1' :: forall a. (a -> a -> a) -> Seq a -> a
reduce1' = forall (s :: * -> *) a. Sequence s => (a -> a -> a) -> s a -> a
reduce1'UsingLists
copy :: forall a. Int -> a -> Seq a
copy = forall (s :: * -> *) a. Sequence s => Int -> a -> s a
copyUsingLists
mapWithIndex :: forall a b. (Int -> a -> b) -> Seq a -> Seq b
mapWithIndex = forall (s :: * -> *) a b.
Sequence s =>
(Int -> a -> b) -> s a -> s b
mapWithIndexUsingLists
foldrWithIndex :: forall a b. (Int -> a -> b -> b) -> b -> Seq a -> b
foldrWithIndex = forall (s :: * -> *) a b.
Sequence s =>
(Int -> a -> b -> b) -> b -> s a -> b
foldrWithIndexUsingLists
foldrWithIndex' :: forall a b. (Int -> a -> b -> b) -> b -> Seq a -> b
foldrWithIndex' = forall (s :: * -> *) a b.
Sequence s =>
(Int -> a -> b -> b) -> b -> s a -> b
foldrWithIndex'UsingLists
foldlWithIndex :: forall b a. (b -> Int -> a -> b) -> b -> Seq a -> b
foldlWithIndex = forall (s :: * -> *) b a.
Sequence s =>
(b -> Int -> a -> b) -> b -> s a -> b
foldlWithIndexUsingLists
foldlWithIndex' :: forall b a. (b -> Int -> a -> b) -> b -> Seq a -> b
foldlWithIndex' = forall (s :: * -> *) b a.
Sequence s =>
(b -> Int -> a -> b) -> b -> s a -> b
foldlWithIndex'UsingLists
take :: forall a. Int -> Seq a -> Seq a
take = forall (s :: * -> *) a. Sequence s => Int -> s a -> s a
takeUsingLists
splitAt :: forall a. Int -> Seq a -> (Seq a, Seq a)
splitAt = forall (s :: * -> *) a. Sequence s => Int -> s a -> (s a, s a)
splitAtDefault
filter :: forall a. (a -> Bool) -> Seq a -> Seq a
filter = forall (s :: * -> *) a. Sequence s => (a -> Bool) -> s a -> s a
filterUsingFoldr
partition :: forall a. (a -> Bool) -> Seq a -> (Seq a, Seq a)
partition = forall (s :: * -> *) a.
Sequence s =>
(a -> Bool) -> s a -> (s a, s a)
partitionUsingFoldr
subseq :: forall a. Int -> Int -> Seq a -> Seq a
subseq = forall (s :: * -> *) a. Sequence s => Int -> Int -> s a -> s a
subseqDefault
takeWhile :: forall a. (a -> Bool) -> Seq a -> Seq a
takeWhile = forall (s :: * -> *) a. Sequence s => (a -> Bool) -> s a -> s a
takeWhileUsingLview
dropWhile :: forall a. (a -> Bool) -> Seq a -> Seq a
dropWhile = forall (s :: * -> *) a. Sequence s => (a -> Bool) -> s a -> s a
dropWhileUsingLview
splitWhile :: forall a. (a -> Bool) -> Seq a -> (Seq a, Seq a)
splitWhile = forall (s :: * -> *) a.
Sequence s =>
(a -> Bool) -> s a -> (s a, s a)
splitWhileUsingLview
zip :: forall a b. Seq a -> Seq b -> Seq (a, b)
zip = forall (s :: * -> *) a b. Sequence s => s a -> s b -> s (a, b)
zipUsingLists
zip3 :: forall a b c. Seq a -> Seq b -> Seq c -> Seq (a, b, c)
zip3 = forall (s :: * -> *) a b c.
Sequence s =>
s a -> s b -> s c -> s (a, b, c)
zip3UsingLists
zipWith :: forall a b c. (a -> b -> c) -> Seq a -> Seq b -> Seq c
zipWith = forall (s :: * -> *) a b c.
Sequence s =>
(a -> b -> c) -> s a -> s b -> s c
zipWithUsingLists
zipWith3 :: forall a b c d.
(a -> b -> c -> d) -> Seq a -> Seq b -> Seq c -> Seq d
zipWith3 = forall (s :: * -> *) a b c d.
Sequence s =>
(a -> b -> c -> d) -> s a -> s b -> s c -> s d
zipWith3UsingLists
structuralInvariant :: forall a. Seq a -> Bool
structuralInvariant = forall a b. a -> b -> a
const Bool
True
instance S.Sequence Seq where
{lcons :: forall a. a -> Seq a -> Seq a
lcons = forall a. a -> Seq a -> Seq a
lcons; rcons :: forall a. a -> Seq a -> Seq a
rcons = forall a. a -> Seq a -> Seq a
rcons;
lview :: forall (m :: * -> *) a. MonadFail m => Seq a -> m (a, Seq a)
lview = forall (m :: * -> *) a. MonadFail m => Seq a -> m (a, Seq a)
lview; lhead :: forall a. Seq a -> a
lhead = forall a. Seq a -> a
lhead; ltail :: forall t. Seq t -> Seq t
ltail = forall t. Seq t -> Seq t
ltail;
lheadM :: forall (m :: * -> *) a. MonadFail m => Seq a -> m a
lheadM = forall (m :: * -> *) a. MonadFail m => Seq a -> m a
lheadM; ltailM :: forall (m :: * -> *) a. MonadFail m => Seq a -> m (Seq a)
ltailM = forall (m :: * -> *) a. MonadFail m => Seq a -> m (Seq a)
ltailM; rheadM :: forall (m :: * -> *) a. MonadFail m => Seq a -> m a
rheadM = forall (m :: * -> *) a. MonadFail m => Seq a -> m a
rheadM; rtailM :: forall (m :: * -> *) a. MonadFail m => Seq a -> m (Seq a)
rtailM = forall (m :: * -> *) a. MonadFail m => Seq a -> m (Seq a)
rtailM;
rview :: forall (m :: * -> *) a. MonadFail m => Seq a -> m (a, Seq a)
rview = forall (m :: * -> *) a. MonadFail m => Seq a -> m (a, Seq a)
rview; rhead :: forall a. Seq a -> a
rhead = forall a. Seq a -> a
rhead; rtail :: forall t. Seq t -> Seq t
rtail = forall t. Seq t -> Seq t
rtail; null :: forall a. Seq a -> Bool
null = forall a. Seq a -> Bool
null;
size :: forall a. Seq a -> Int
size = forall a. Seq a -> Int
size; concat :: forall a. Seq (Seq a) -> Seq a
concat = forall a. Seq (Seq a) -> Seq a
concat; reverse :: forall t. Seq t -> Seq t
reverse = forall t. Seq t -> Seq t
reverse;
reverseOnto :: forall a. Seq a -> Seq a -> Seq a
reverseOnto = forall a. Seq a -> Seq a -> Seq a
reverseOnto; fromList :: forall a. [a] -> Seq a
fromList = forall a. [a] -> Seq a
fromList; toList :: forall a. Seq a -> [a]
toList = forall a. Seq a -> [a]
toList;
fold :: forall a b. (a -> b -> b) -> b -> Seq a -> b
fold = forall a b. (a -> b -> b) -> b -> Seq a -> b
fold; fold' :: forall a b. (a -> b -> b) -> b -> Seq a -> b
fold' = forall a b. (a -> b -> b) -> b -> Seq a -> b
fold'; fold1 :: forall a. (a -> a -> a) -> Seq a -> a
fold1 = forall a. (a -> a -> a) -> Seq a -> a
fold1; fold1' :: forall a. (a -> a -> a) -> Seq a -> a
fold1' = forall a. (a -> a -> a) -> Seq a -> a
fold1';
foldr :: forall a b. (a -> b -> b) -> b -> Seq a -> b
foldr = forall a b. (a -> b -> b) -> b -> Seq a -> b
foldr; foldr' :: forall a b. (a -> b -> b) -> b -> Seq a -> b
foldr' = forall a b. (a -> b -> b) -> b -> Seq a -> b
foldr'; foldl :: forall b a. (b -> a -> b) -> b -> Seq a -> b
foldl = forall b a. (b -> a -> b) -> b -> Seq a -> b
foldl; foldl' :: forall b a. (b -> a -> b) -> b -> Seq a -> b
foldl' = forall b a. (b -> a -> b) -> b -> Seq a -> b
foldl';
foldr1 :: forall a. (a -> a -> a) -> Seq a -> a
foldr1 = forall a. (a -> a -> a) -> Seq a -> a
foldr1; foldr1' :: forall a. (a -> a -> a) -> Seq a -> a
foldr1' = forall a. (a -> a -> a) -> Seq a -> a
foldr1'; foldl1 :: forall a. (a -> a -> a) -> Seq a -> a
foldl1 = forall a. (a -> a -> a) -> Seq a -> a
foldl1; foldl1' :: forall a. (a -> a -> a) -> Seq a -> a
foldl1' = forall a. (a -> a -> a) -> Seq a -> a
foldl1';
reducer :: forall a. (a -> a -> a) -> a -> Seq a -> a
reducer = forall a. (a -> a -> a) -> a -> Seq a -> a
reducer; reducer' :: forall a. (a -> a -> a) -> a -> Seq a -> a
reducer' = forall a. (a -> a -> a) -> a -> Seq a -> a
reducer'; reducel :: forall a. (a -> a -> a) -> a -> Seq a -> a
reducel = forall a. (a -> a -> a) -> a -> Seq a -> a
reducel;
reducel' :: forall a. (a -> a -> a) -> a -> Seq a -> a
reducel' = forall a. (a -> a -> a) -> a -> Seq a -> a
reducel'; reduce1 :: forall a. (a -> a -> a) -> Seq a -> a
reduce1 = forall a. (a -> a -> a) -> Seq a -> a
reduce1; reduce1' :: forall a. (a -> a -> a) -> Seq a -> a
reduce1' = forall a. (a -> a -> a) -> Seq a -> a
reduce1';
copy :: forall a. Int -> a -> Seq a
copy = forall a. Int -> a -> Seq a
copy; inBounds :: forall a. Int -> Seq a -> Bool
inBounds = forall a. Int -> Seq a -> Bool
inBounds; lookup :: forall a. Int -> Seq a -> a
lookup = forall a. Int -> Seq a -> a
lookup;
lookupM :: forall (m :: * -> *) a. MonadFail m => Int -> Seq a -> m a
lookupM = forall (m :: * -> *) a. MonadFail m => Int -> Seq a -> m a
lookupM; lookupWithDefault :: forall a. a -> Int -> Seq a -> a
lookupWithDefault = forall a. a -> Int -> Seq a -> a
lookupWithDefault;
update :: forall a. Int -> a -> Seq a -> Seq a
update = forall a. Int -> a -> Seq a -> Seq a
update; adjust :: forall a. (a -> a) -> Int -> Seq a -> Seq a
adjust = forall a. (a -> a) -> Int -> Seq a -> Seq a
adjust; mapWithIndex :: forall a b. (Int -> a -> b) -> Seq a -> Seq b
mapWithIndex = forall a b. (Int -> a -> b) -> Seq a -> Seq b
mapWithIndex;
foldrWithIndex :: forall a b. (Int -> a -> b -> b) -> b -> Seq a -> b
foldrWithIndex = forall a b. (Int -> a -> b -> b) -> b -> Seq a -> b
foldrWithIndex; foldrWithIndex' :: forall a b. (Int -> a -> b -> b) -> b -> Seq a -> b
foldrWithIndex' = forall a b. (Int -> a -> b -> b) -> b -> Seq a -> b
foldrWithIndex';
foldlWithIndex :: forall b a. (b -> Int -> a -> b) -> b -> Seq a -> b
foldlWithIndex = forall b a. (b -> Int -> a -> b) -> b -> Seq a -> b
foldlWithIndex; foldlWithIndex' :: forall b a. (b -> Int -> a -> b) -> b -> Seq a -> b
foldlWithIndex' = forall b a. (b -> Int -> a -> b) -> b -> Seq a -> b
foldlWithIndex';
take :: forall a. Int -> Seq a -> Seq a
take = forall a. Int -> Seq a -> Seq a
take; drop :: forall a. Int -> Seq a -> Seq a
drop = forall a. Int -> Seq a -> Seq a
drop; splitAt :: forall a. Int -> Seq a -> (Seq a, Seq a)
splitAt = forall a. Int -> Seq a -> (Seq a, Seq a)
splitAt; subseq :: forall a. Int -> Int -> Seq a -> Seq a
subseq = forall a. Int -> Int -> Seq a -> Seq a
subseq;
filter :: forall a. (a -> Bool) -> Seq a -> Seq a
filter = forall a. (a -> Bool) -> Seq a -> Seq a
filter; partition :: forall a. (a -> Bool) -> Seq a -> (Seq a, Seq a)
partition = forall a. (a -> Bool) -> Seq a -> (Seq a, Seq a)
partition; takeWhile :: forall a. (a -> Bool) -> Seq a -> Seq a
takeWhile = forall a. (a -> Bool) -> Seq a -> Seq a
takeWhile;
dropWhile :: forall a. (a -> Bool) -> Seq a -> Seq a
dropWhile = forall a. (a -> Bool) -> Seq a -> Seq a
dropWhile; splitWhile :: forall a. (a -> Bool) -> Seq a -> (Seq a, Seq a)
splitWhile = forall a. (a -> Bool) -> Seq a -> (Seq a, Seq a)
splitWhile; zip :: forall a b. Seq a -> Seq b -> Seq (a, b)
zip = forall a b. Seq a -> Seq b -> Seq (a, b)
zip;
zip3 :: forall a b c. Seq a -> Seq b -> Seq c -> Seq (a, b, c)
zip3 = forall a b c. Seq a -> Seq b -> Seq c -> Seq (a, b, c)
zip3; zipWith :: forall a b c. (a -> b -> c) -> Seq a -> Seq b -> Seq c
zipWith = forall a b c. (a -> b -> c) -> Seq a -> Seq b -> Seq c
zipWith; zipWith3 :: forall a b c d.
(a -> b -> c -> d) -> Seq a -> Seq b -> Seq c -> Seq d
zipWith3 = forall a b c d.
(a -> b -> c -> d) -> Seq a -> Seq b -> Seq c -> Seq d
zipWith3; unzip :: forall a b. Seq (a, b) -> (Seq a, Seq b)
unzip = forall a b. Seq (a, b) -> (Seq a, Seq b)
unzip;
unzip3 :: forall a b c. Seq (a, b, c) -> (Seq a, Seq b, Seq c)
unzip3 = forall a b c. Seq (a, b, c) -> (Seq a, Seq b, Seq c)
unzip3; unzipWith :: forall a b c. (a -> b) -> (a -> c) -> Seq a -> (Seq b, Seq c)
unzipWith = forall a b c. (a -> b) -> (a -> c) -> Seq a -> (Seq b, Seq c)
unzipWith; unzipWith3 :: forall a b c d.
(a -> b) -> (a -> c) -> (a -> d) -> Seq a -> (Seq b, Seq c, Seq d)
unzipWith3 = forall a b c d.
(a -> b) -> (a -> c) -> (a -> d) -> Seq a -> (Seq b, Seq c, Seq d)
unzipWith3;
strict :: forall t. Seq t -> Seq t
strict = forall t. Seq t -> Seq t
strict; strictWith :: forall a b. (a -> b) -> Seq a -> Seq a
strictWith = forall a b. (a -> b) -> Seq a -> Seq a
strictWith;
structuralInvariant :: forall a. Seq a -> Bool
structuralInvariant = forall a. Seq a -> Bool
structuralInvariant; instanceName :: forall a. Seq a -> String
instanceName Seq a
_ = String
moduleName}
instance Functor Seq where
fmap :: forall a b. (a -> b) -> Seq a -> Seq b
fmap = forall a b. (a -> b) -> Seq a -> Seq b
map
instance App.Alternative Seq where
empty :: forall a. Seq a
empty = forall a. Seq a
empty
<|> :: forall a. Seq a -> Seq a -> Seq a
(<|>) = forall a. Seq a -> Seq a -> Seq a
append
instance App.Applicative Seq where
pure :: forall a. a -> Seq a
pure = forall (m :: * -> *) a. Monad m => a -> m a
return
Seq (a -> b)
x <*> :: forall a b. Seq (a -> b) -> Seq a -> Seq b
<*> Seq a
y = do
a -> b
x' <- Seq (a -> b)
x
a
y' <- Seq a
y
forall (m :: * -> *) a. Monad m => a -> m a
return (a -> b
x' a
y')
instance Monad Seq where
return :: forall a. a -> Seq a
return = forall a. a -> Seq a
singleton
Seq a
xs >>= :: forall a b. Seq a -> (a -> Seq b) -> Seq b
>>= a -> Seq b
k = forall a b. (a -> Seq b) -> Seq a -> Seq b
concatMap a -> Seq b
k Seq a
xs
instance MonadPlus Seq where
mplus :: forall a. Seq a -> Seq a -> Seq a
mplus = forall a. Seq a -> Seq a -> Seq a
append
mzero :: forall a. Seq a
mzero = forall a. Seq a
empty
instance Eq a => Eq (Seq a) where
Seq a
xs == :: Seq a -> Seq a -> Bool
== Seq a
ys =
(forall a. Seq a -> Int
size Seq a
xs forall a. Eq a => a -> a -> Bool
== forall a. Seq a -> Int
size Seq a
ys) Bool -> Bool -> Bool
&& (forall a. Seq a -> [a]
toList Seq a
xs forall a. Eq a => a -> a -> Bool
== forall a. Seq a -> [a]
toList Seq a
ys)
instance Ord a => Ord (Seq a) where
compare :: Seq a -> Seq a -> Ordering
compare = forall a (s :: * -> *).
(Ord a, Sequence s) =>
s a -> s a -> Ordering
defaultCompare
instance Show a => Show (Seq a) where
showsPrec :: Int -> Seq a -> ShowS
showsPrec = forall a (s :: * -> *). (Show a, Sequence s) => Int -> s a -> ShowS
showsPrecUsingToList
instance Read a => Read (Seq a) where
readsPrec :: Int -> ReadS (Seq a)
readsPrec = forall a (s :: * -> *). (Read a, Sequence s) => Int -> ReadS (s a)
readsPrecUsingFromList
instance Arbitrary a => Arbitrary (Seq a) where
arbitrary :: Gen (Seq a)
arbitrary = do [a]
xs <- forall a. Arbitrary a => Gen a
arbitrary
forall (m :: * -> *) a. Monad m => a -> m a
return (forall a. [a] -> Seq a
fromList [a]
xs)
instance CoArbitrary a => CoArbitrary (Seq a) where
coarbitrary :: forall b. Seq a -> Gen b -> Gen b
coarbitrary Seq a
xs = forall a b. CoArbitrary a => a -> Gen b -> Gen b
coarbitrary (forall a. Seq a -> [a]
toList Seq a
xs)
instance Semigroup (Seq a) where
<> :: Seq a -> Seq a -> Seq a
(<>) = forall a. Seq a -> Seq a -> Seq a
append
instance Monoid (Seq a) where
mempty :: Seq a
mempty = forall a. Seq a
empty
mappend :: Seq a -> Seq a -> Seq a
mappend = forall a. Semigroup a => a -> a -> a
(SG.<>)