{-# LANGUAGE CPP, DataKinds, GADTs, KindSignatures, MultiParamTypeClasses #-}
{-# LANGUAGE NoImplicitPrelude, NoMonomorphismRestriction, NoStarIsType #-}
{-# LANGUAGE PatternSynonyms, PolyKinds, RankNTypes, TypeApplications #-}
{-# LANGUAGE TypeInType, TypeOperators, ViewPatterns #-}
module Data.Sized.Peano {-# DEPRECATED "Removed in future release" #-}
(
Sized(), SomeSized, pattern SomeSized, Ordinal,
DomC(),
length, sLength, null,
(!!), (%!!), index, sIndex, head, last,
uncons, uncons', Uncons, pattern Uncons,
unsnoc, unsnoc', Unsnoc, pattern Unsnoc,
tail, init, take, takeAtMost, drop, splitAt, splitAtMost,
empty, singleton, toSomeSized, replicate, replicate', generate, generate',
cons, (<|), snoc, (|>), append, (++), concat,
zip, zipSame, zipWith, zipWithSame, unzip, unzipWith,
map, reverse, intersperse, nub, sort, sortBy, insert, insertBy,
toList, fromList, fromList', unsafeFromList, unsafeFromList',
fromListWithDefault, fromListWithDefault',
unsized,
toSized, toSized', unsafeToSized, unsafeToSized',
toSizedWithDefault, toSizedWithDefault',
Partitioned(), pattern Partitioned,
takeWhile, dropWhile, span, break, partition,
elem, notElem, find, findIndex, sFindIndex,
findIndices, sFindIndices,
elemIndex, sElemIndex, sUnsafeElemIndex, elemIndices, sElemIndices,
viewCons, ConsView,
pattern (:-), pattern NilCV,
viewSnoc, SnocView,
pattern (:-::), pattern NilSV,
pattern Nil, pattern (:<), pattern NilL , pattern (:>), pattern NilR,
) where
import Data.Sized (DomC)
import qualified Data.Sized as S
import Control.Subcategory
import Data.Kind (Type)
import Data.Singletons.Prelude (POrd ((<=)), SingI)
import Data.Singletons.Prelude.Enum (PEnum (..))
import Data.Type.Natural (Min, Nat (..), One, SNat, Two,
type (*), type (+), type (-))
import Data.Type.Natural.Class (type (-.), type (<))
import qualified Data.Type.Ordinal as O
import Prelude (Bool (..), Eq, Int, Maybe,
Monoid, Ord, Ordering)
type Ordinal = (O.Ordinal :: Nat -> Type)
type Sized = (S.Sized :: (Type -> Type) -> Nat -> Type -> Type)
type SomeSized f a = S.SomeSized' f Nat a
pattern SomeSized
:: forall (f :: Type -> Type) a. ()
=> forall (n :: Nat). SNat n
-> Sized f n a -> SomeSized f a
{-# COMPLETE SomeSized #-}
pattern $bSomeSized :: SNat n -> Sized f n a -> SomeSized f a
$mSomeSized :: forall r (f :: Type -> Type) a.
SomeSized f a
-> (forall (n :: Nat). SNat n -> Sized f n a -> r)
-> (Void# -> r)
-> r
SomeSized n s = S.SomeSized' n s
{-# INLINE length #-}
length :: (Dom f a, SingI n) => Sized f n a -> Int
length :: Sized f n a -> Int
length = forall nat (f :: Type -> Type) (n :: nat) a.
(IsPeano nat, Dom f a, SingI n) =>
Sized f n a -> Int
forall (f :: Type -> Type) (n :: Nat) a.
(IsPeano Nat, Dom f a, SingI n) =>
Sized f n a -> Int
S.length @Nat
{-# INLINE sLength #-}
sLength :: (Dom f a, SingI n) => Sized f n a -> SNat n
sLength :: Sized f n a -> SNat n
sLength = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, Dom f a, SingI n) =>
Sized f n a -> Sing n
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, Dom f a, SingI n) =>
Sized f n a -> Sing n
S.sLength @Nat
{-# INLINE null #-}
null :: (Dom f a, CFoldable f) => Sized f n a -> Bool
null :: Sized f n a -> Bool
null = forall nat (f :: Type -> Type) (n :: nat) a.
(CFoldable f, Dom f a) =>
Sized f n a -> Bool
forall (f :: Type -> Type) (n :: Nat) a.
(CFoldable f, Dom f a) =>
Sized f n a -> Bool
S.null @Nat
{-# INLINE (!!) #-}
(!!) :: (Dom f a, CFoldable f, (One <= m) ~ 'True) => Sized f m a -> Int -> a
!! :: Sized f m a -> Int -> a
(!!) = forall nat (f :: Type -> Type) (m :: nat) a.
(CFoldable f, Dom f a, (One nat <= m) ~ 'True) =>
Sized f m a -> Int -> a
forall (f :: Type -> Type) (m :: Nat) a.
(CFoldable f, Dom f a, (One Nat <= m) ~ 'True) =>
Sized f m a -> Int -> a
(S.!!) @Nat
{-# INLINE (%!!) #-}
(%!!) :: (Dom f c, CFoldable f) => Sized f n c -> Ordinal n -> c
%!! :: Sized f n c -> Ordinal n -> c
(%!!) = forall nat (f :: Type -> Type) (n :: nat) c.
(HasOrdinal nat, CFoldable f, Dom f c) =>
Sized f n c -> Ordinal n -> c
forall (f :: Type -> Type) (n :: Nat) c.
(HasOrdinal Nat, CFoldable f, Dom f c) =>
Sized f n c -> Ordinal n -> c
(S.%!!) @Nat
{-# INLINE index #-}
index
:: (Dom f a, CFoldable f, (One <= m) ~ 'True)
=> Int -> Sized f m a -> a
index :: Int -> Sized f m a -> a
index = forall nat (f :: Type -> Type) (m :: nat) a.
(CFoldable f, Dom f a, (One nat <= m) ~ 'True) =>
Int -> Sized f m a -> a
forall (f :: Type -> Type) (m :: Nat) a.
(CFoldable f, Dom f a, (One Nat <= m) ~ 'True) =>
Int -> Sized f m a -> a
S.index @Nat
{-# INLINE sIndex #-}
sIndex :: (Dom f c, CFoldable f) => Ordinal n -> Sized f n c -> c
sIndex :: Ordinal n -> Sized f n c -> c
sIndex = forall nat (f :: Type -> Type) (n :: nat) c.
(HasOrdinal nat, CFoldable f, Dom f c) =>
Ordinal n -> Sized f n c -> c
forall (f :: Type -> Type) (n :: Nat) c.
(HasOrdinal Nat, CFoldable f, Dom f c) =>
Ordinal n -> Sized f n c -> c
S.sIndex @Nat
{-# INLINE head #-}
head :: (Dom f a, CFoldable f, ('Z < n) ~ 'True) => Sized f n a -> a
head :: Sized f n a -> a
head = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, CFoldable f, Dom f a, (Zero nat < n) ~ 'True) =>
Sized f n a -> a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, CFoldable f, Dom f a, (Zero Nat < n) ~ 'True) =>
Sized f n a -> a
S.head @Nat
{-# INLINE last #-}
last :: (Dom f a, CFoldable f, ('Z < n) ~ 'True) => Sized f n a -> a
last :: Sized f n a -> a
last = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, (Zero nat < n) ~ 'True, CFoldable f, Dom f a) =>
Sized f n a -> a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, (Zero Nat < n) ~ 'True, CFoldable f, Dom f a) =>
Sized f n a -> a
S.last @Nat
{-# INLINE uncons #-}
uncons
:: (Dom f a, SingI n, CFreeMonoid f, ('Z < n) ~ 'True)
=> Sized f n a -> Uncons f n a
uncons :: Sized f n a -> Uncons f n a
uncons = forall nat (f :: Type -> Type) (n :: nat) a.
(PeanoOrder nat, SingI n, CFreeMonoid f, Dom f a,
(Zero nat < n) ~ 'True) =>
Sized f n a -> Uncons f n a
forall (f :: Type -> Type) (n :: Nat) a.
(PeanoOrder Nat, SingI n, CFreeMonoid f, Dom f a,
(Zero Nat < n) ~ 'True) =>
Sized f n a -> Uncons f n a
S.uncons @Nat
{-# INLINE uncons' #-}
uncons'
:: (Dom f a, SingI n, CFreeMonoid f, ('Z < n) ~ 'True)
=> Sized f n a
-> Uncons f n a
uncons' :: Sized f n a -> Uncons f n a
uncons' = forall nat (f :: Type -> Type) (n :: nat) a.
(PeanoOrder nat, SingI n, CFreeMonoid f, Dom f a,
(Zero nat < n) ~ 'True) =>
Sized f n a -> Uncons f n a
forall (f :: Type -> Type) (n :: Nat) a.
(PeanoOrder Nat, SingI n, CFreeMonoid f, Dom f a,
(Zero Nat < n) ~ 'True) =>
Sized f n a -> Uncons f n a
S.uncons @Nat
{-# INLINE unsnoc #-}
unsnoc
:: (Dom f a, SingI n, CFreeMonoid f, ('Z < n) ~ 'True)
=> Sized f n a -> Unsnoc f n a
unsnoc :: Sized f n a -> Unsnoc f n a
unsnoc = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, SingI n, CFreeMonoid f, Dom f a,
(Zero nat < n) ~ 'True) =>
Sized f n a -> Unsnoc f n a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, SingI n, CFreeMonoid f, Dom f a,
(Zero Nat < n) ~ 'True) =>
Sized f n a -> Unsnoc f n a
S.unsnoc @Nat
{-# INLINE unsnoc' #-}
unsnoc' :: (Dom f a, SingI n, CFreeMonoid f) => proxy n -> Sized f ('S n) a -> Unsnoc f ('S n) a
unsnoc' :: proxy n -> Sized f ('S n) a -> Unsnoc f ('S n) a
unsnoc' = forall nat (f :: Type -> Type) (n :: nat) a (proxy :: nat -> Type).
(HasOrdinal nat, SingI n, CFreeMonoid f, Dom f a) =>
proxy n -> Sized f (Succ n) a -> Unsnoc f (Succ n) a
forall (f :: Type -> Type) (n :: Nat) a (proxy :: Nat -> Type).
(HasOrdinal Nat, SingI n, CFreeMonoid f, Dom f a) =>
proxy n -> Sized f (Succ n) a -> Unsnoc f (Succ n) a
S.unsnoc' @Nat
type Uncons f (n :: Nat) a = S.Uncons f n a
pattern Uncons
:: forall (f :: Type -> Type) (n :: Nat) a. ()
=> forall (n1 :: Nat). (n ~ Succ n1, SingI n1)
=> a -> Sized f n1 a -> Uncons f n a
pattern $bUncons :: a -> Sized f n1 a -> Uncons f n a
$mUncons :: forall r (f :: Type -> Type) (n :: Nat) a.
Uncons f n a
-> (forall (n1 :: Nat).
(n ~ Succ n1, SingI n1) =>
a -> Sized f n1 a -> r)
-> (Void# -> r)
-> r
Uncons a as = S.Uncons a as
type Unsnoc f (n :: Nat) a = S.Unsnoc f n a
pattern Unsnoc
:: forall (f :: Type -> Type) (n :: Nat) a. ()
=> forall (n1 :: Nat). (n ~ Succ n1)
=> Sized f n1 a -> a -> Unsnoc f n a
pattern $bUnsnoc :: Sized f n1 a -> a -> Unsnoc f n a
$mUnsnoc :: forall r (f :: Type -> Type) (n :: Nat) a.
Unsnoc f n a
-> (forall (n1 :: Nat). (n ~ Succ n1) => Sized f n1 a -> a -> r)
-> (Void# -> r)
-> r
Unsnoc xs x = S.Unsnoc xs x
{-# INLINE tail #-}
tail :: (Dom f a, CFreeMonoid f) => Sized f (One + n) a -> Sized f n a
tail :: Sized f (One + n) a -> Sized f n a
tail = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, CFreeMonoid f, Dom f a) =>
Sized f (One nat + n) a -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, CFreeMonoid f, Dom f a) =>
Sized f (One Nat + n) a -> Sized f n a
S.tail @Nat
{-# INLINE init #-}
init :: (Dom f a, CFreeMonoid f) => Sized f (n + One) a -> Sized f n a
init :: Sized f (n + One) a -> Sized f n a
init = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, CFreeMonoid f, Dom f a) =>
Sized f (n + One nat) a -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, CFreeMonoid f, Dom f a) =>
Sized f (n + One Nat) a -> Sized f n a
S.init @Nat
{-# INLINE take #-}
take
:: (Dom f a, CFreeMonoid f, (n <= m) ~ 'True)
=> SNat n -> Sized f m a -> Sized f n a
take :: SNat n -> Sized f m a -> Sized f n a
take = forall nat (n :: nat) (f :: Type -> Type) (m :: nat) a.
(CFreeMonoid f, Dom f a, (n <= m) ~ 'True, HasOrdinal nat) =>
Sing n -> Sized f m a -> Sized f n a
forall (n :: Nat) (f :: Type -> Type) (m :: Nat) a.
(CFreeMonoid f, Dom f a, (n <= m) ~ 'True, HasOrdinal Nat) =>
Sing n -> Sized f m a -> Sized f n a
S.take @Nat
{-# INLINE takeAtMost #-}
takeAtMost
:: (Dom f a, CFreeMonoid f)
=> SNat n -> Sized f m a -> Sized f (Min n m) a
takeAtMost :: SNat n -> Sized f m a -> Sized f (Min n m) a
takeAtMost = forall nat (n :: nat) (f :: Type -> Type) (m :: nat) a.
(CFreeMonoid f, Dom f a, HasOrdinal nat) =>
Sing n -> Sized f m a -> Sized f (Min n m) a
forall (n :: Nat) (f :: Type -> Type) (m :: Nat) a.
(CFreeMonoid f, Dom f a, HasOrdinal Nat) =>
Sing n -> Sized f m a -> Sized f (Min n m) a
S.takeAtMost @Nat
{-# INLINE drop #-}
drop
:: (Dom f a, CFreeMonoid f, (n <= m) ~ 'True)
=> SNat n -> Sized f m a -> Sized f (m - n) a
drop :: SNat n -> Sized f m a -> Sized f (m - n) a
drop = forall nat (n :: nat) (f :: Type -> Type) (m :: nat) a.
(HasOrdinal nat, CFreeMonoid f, Dom f a, (n <= m) ~ 'True) =>
Sing n -> Sized f m a -> Sized f (m - n) a
forall (n :: Nat) (f :: Type -> Type) (m :: Nat) a.
(HasOrdinal Nat, CFreeMonoid f, Dom f a, (n <= m) ~ 'True) =>
Sing n -> Sized f m a -> Sized f (m - n) a
S.drop @Nat
{-# INLINE splitAt #-}
splitAt
:: (Dom f a, CFreeMonoid f, (n <= m) ~ 'True)
=> SNat n -> Sized f m a -> (Sized f n a, Sized f (m - n) a)
splitAt :: SNat n -> Sized f m a -> (Sized f n a, Sized f (m - n) a)
splitAt = forall nat (n :: nat) (f :: Type -> Type) (m :: nat) a.
(CFreeMonoid f, Dom f a, (n <= m) ~ 'True, HasOrdinal nat) =>
Sing n -> Sized f m a -> (Sized f n a, Sized f (m -. n) a)
forall (n :: Nat) (f :: Type -> Type) (m :: Nat) a.
(CFreeMonoid f, Dom f a, (n <= m) ~ 'True, HasOrdinal Nat) =>
Sing n -> Sized f m a -> (Sized f n a, Sized f (m -. n) a)
S.splitAt @Nat
{-# INLINE splitAtMost #-}
splitAtMost
:: (Dom f a, CFreeMonoid f)
=> SNat n -> Sized f m a
-> (Sized f (Min n m) a, Sized f (m -. n) a)
splitAtMost :: SNat n -> Sized f m a -> (Sized f (Min n m) a, Sized f (m -. n) a)
splitAtMost = forall nat (n :: nat) (f :: Type -> Type) (m :: nat) a.
(HasOrdinal nat, CFreeMonoid f, Dom f a) =>
Sing n -> Sized f m a -> (Sized f (Min n m) a, Sized f (m -. n) a)
forall (n :: Nat) (f :: Type -> Type) (m :: Nat) a.
(HasOrdinal Nat, CFreeMonoid f, Dom f a) =>
Sing n -> Sized f m a -> (Sized f (Min n m) a, Sized f (m -. n) a)
S.splitAtMost @Nat
{-# INLINE empty #-}
empty :: (Dom f a, Monoid (f a)) => Sized f 'Z a
empty :: Sized f 'Z a
empty = forall nat (f :: Type -> Type) a.
(Monoid (f a), HasOrdinal nat, Dom f a) =>
Sized f (Zero nat) a
forall (f :: Type -> Type) a.
(Monoid (f a), HasOrdinal Nat, Dom f a) =>
Sized f (Zero Nat) a
S.empty @Nat
{-# INLINE singleton #-}
singleton :: (Dom f a, CFreeMonoid f) => a -> Sized f One a
singleton :: a -> Sized f One a
singleton = forall nat (f :: Type -> Type) a.
(CPointed f, Dom f a) =>
a -> Sized f (One nat) a
forall (f :: Type -> Type) a.
(CPointed f, Dom f a) =>
a -> Sized f (One Nat) a
S.singleton @Nat
{-# INLINE toSomeSized #-}
toSomeSized :: (Dom f a, CFoldable f) => f a -> SomeSized f a
toSomeSized :: f a -> SomeSized f a
toSomeSized = forall nat (f :: Type -> Type) a.
(HasOrdinal nat, Dom f a, CFoldable f) =>
f a -> SomeSized' f nat a
forall (f :: Type -> Type) a.
(HasOrdinal Nat, Dom f a, CFoldable f) =>
f a -> SomeSized' f Nat a
S.toSomeSized @Nat
{-# INLINE replicate #-}
replicate :: (Dom f a, CFreeMonoid f) => SNat n -> a -> Sized f n a
replicate :: SNat n -> a -> Sized f n a
replicate = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, CFreeMonoid f, Dom f a) =>
Sing n -> a -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, CFreeMonoid f, Dom f a) =>
Sing n -> a -> Sized f n a
S.replicate @Nat
{-# INLINE replicate' #-}
replicate' :: (Dom f a, CFreeMonoid f, SingI n) => a -> Sized f n a
replicate' :: a -> Sized f n a
replicate' = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, SingI n, CFreeMonoid f, Dom f a) =>
a -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, SingI n, CFreeMonoid f, Dom f a) =>
a -> Sized f n a
S.replicate' @Nat
{-# INLINE generate #-}
generate :: (Dom f a, CFreeMonoid f) => SNat n -> (Ordinal n -> a) -> Sized f n a
generate :: SNat n -> (Ordinal n -> a) -> Sized f n a
generate = forall nat (f :: Type -> Type) (n :: nat) a.
(CFreeMonoid f, Dom f a, HasOrdinal nat) =>
Sing n -> (Ordinal n -> a) -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(CFreeMonoid f, Dom f a, HasOrdinal Nat) =>
Sing n -> (Ordinal n -> a) -> Sized f n a
S.generate @Nat
{-# INLINE generate' #-}
generate' :: forall f n a.
(SingI n, Dom f a, CFreeMonoid f)
=> (Ordinal n -> a) -> Sized f n a
generate' :: (Ordinal n -> a) -> Sized f n a
generate' = forall nat (f :: Type -> Type) (n :: nat) a.
(SingI n, CFreeMonoid f, Dom f a, HasOrdinal nat) =>
(Ordinal n -> a) -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(SingI n, CFreeMonoid f, Dom f a, HasOrdinal Nat) =>
(Ordinal n -> a) -> Sized f n a
S.generate' @Nat
{-# INLINE cons #-}
cons :: (Dom f a, CFreeMonoid f) => a -> Sized f n a -> Sized f ('S n) a
cons :: a -> Sized f n a -> Sized f ('S n) a
cons = forall nat (f :: Type -> Type) (n :: nat) a.
(CFreeMonoid f, Dom f a) =>
a -> Sized f n a -> Sized f (One nat + n) a
forall (f :: Type -> Type) (n :: Nat) a.
(CFreeMonoid f, Dom f a) =>
a -> Sized f n a -> Sized f (One Nat + n) a
S.cons @Nat
{-# INLINE snoc #-}
snoc :: (Dom f a, CFreeMonoid f) => Sized f n a -> a -> Sized f (n + One) a
snoc :: Sized f n a -> a -> Sized f (n + One) a
snoc = forall nat (f :: Type -> Type) (n :: nat) a.
(CFreeMonoid f, Dom f a) =>
Sized f n a -> a -> Sized f (n + One nat) a
forall (f :: Type -> Type) (n :: Nat) a.
(CFreeMonoid f, Dom f a) =>
Sized f n a -> a -> Sized f (n + One Nat) a
S.snoc @Nat
{-# INLINE (<|) #-}
(<|) :: (Dom f a, CFreeMonoid f) => a -> Sized f n a -> Sized f ('S n) a
<| :: a -> Sized f n a -> Sized f ('S n) a
(<|) = forall nat (f :: Type -> Type) (n :: nat) a.
(CFreeMonoid f, Dom f a) =>
a -> Sized f n a -> Sized f (One nat + n) a
forall (f :: Type -> Type) (n :: Nat) a.
(CFreeMonoid f, Dom f a) =>
a -> Sized f n a -> Sized f (One Nat + n) a
(S.<|) @Nat
{-# INLINE (|>) #-}
(|>) :: (Dom f a, CFreeMonoid f) => Sized f n a -> a -> Sized f (n + One) a
|> :: Sized f n a -> a -> Sized f (n + One) a
(|>) = forall nat (f :: Type -> Type) (n :: nat) a.
(CFreeMonoid f, Dom f a) =>
Sized f n a -> a -> Sized f (n + One nat) a
forall (f :: Type -> Type) (n :: Nat) a.
(CFreeMonoid f, Dom f a) =>
Sized f n a -> a -> Sized f (n + One Nat) a
(S.|>) @Nat
{-# INLINE (++) #-}
(++) :: (Dom f a, CFreeMonoid f) => Sized f n a -> Sized f m a -> Sized f (n + m) a
++ :: Sized f n a -> Sized f m a -> Sized f (n + m) a
(++) = forall nat (f :: Type -> Type) (n :: nat) (m :: nat) a.
(CFreeMonoid f, Dom f a) =>
Sized f n a -> Sized f m a -> Sized f (n + m) a
forall (f :: Type -> Type) (n :: Nat) (m :: Nat) a.
(CFreeMonoid f, Dom f a) =>
Sized f n a -> Sized f m a -> Sized f (n + m) a
(S.++) @Nat
{-# INLINE append #-}
append :: (Dom f a, CFreeMonoid f) => Sized f n a -> Sized f m a -> Sized f (n + m) a
append :: Sized f n a -> Sized f m a -> Sized f (n + m) a
append = forall nat (f :: Type -> Type) (n :: nat) (m :: nat) a.
(CFreeMonoid f, Dom f a) =>
Sized f n a -> Sized f m a -> Sized f (n + m) a
forall (f :: Type -> Type) (n :: Nat) (m :: Nat) a.
(CFreeMonoid f, Dom f a) =>
Sized f n a -> Sized f m a -> Sized f (n + m) a
S.append @Nat
{-# INLINE concat #-}
concat
:: (Dom f a, Dom f' (f a), Dom f' (Sized f n a),
CFreeMonoid f, CFunctor f', CFoldable f'
) => Sized f' m (Sized f n a) -> Sized f (m * n) a
concat :: Sized f' m (Sized f n a) -> Sized f (m * n) a
concat = forall nat (f' :: Type -> Type) (m :: nat) (f :: Type -> Type)
(n :: nat) a.
(CFreeMonoid f, CFunctor f', CFoldable f', Dom f a, Dom f' (f a),
Dom f' (Sized f n a)) =>
Sized f' m (Sized f n a) -> Sized f (m * n) a
forall (f' :: Type -> Type) (m :: Nat) (f :: Type -> Type)
(n :: Nat) a.
(CFreeMonoid f, CFunctor f', CFoldable f', Dom f a, Dom f' (f a),
Dom f' (Sized f n a)) =>
Sized f' m (Sized f n a) -> Sized f (m * n) a
S.concat @Nat
{-# INLINE zip #-}
zip :: (Dom f a, Dom f b, Dom f (a, b), CZip f)
=> Sized f n a -> Sized f m b -> Sized f (Min n m) (a, b)
zip :: Sized f n a -> Sized f m b -> Sized f (Min n m) (a, b)
zip = forall nat (f :: Type -> Type) (n :: nat) a (m :: nat) b.
(Dom f a, CZip f, Dom f b, Dom f (a, b)) =>
Sized f n a -> Sized f m b -> Sized f (Min n m) (a, b)
forall (f :: Type -> Type) (n :: Nat) a (m :: Nat) b.
(Dom f a, CZip f, Dom f b, Dom f (a, b)) =>
Sized f n a -> Sized f m b -> Sized f (Min n m) (a, b)
S.zip @Nat
{-# INLINE zipSame #-}
zipSame :: (Dom f a, Dom f b, Dom f (a, b), CZip f)
=> Sized f n a -> Sized f n b -> Sized f n (a, b)
zipSame :: Sized f n a -> Sized f n b -> Sized f n (a, b)
zipSame = forall nat (f :: Type -> Type) (n :: nat) a b.
(Dom f a, CZip f, Dom f b, Dom f (a, b)) =>
Sized f n a -> Sized f n b -> Sized f n (a, b)
forall (f :: Type -> Type) (n :: Nat) a b.
(Dom f a, CZip f, Dom f b, Dom f (a, b)) =>
Sized f n a -> Sized f n b -> Sized f n (a, b)
S.zipSame @Nat
{-# INLINE zipWith #-}
zipWith :: (Dom f a, Dom f b, Dom f c, CZip f, CFreeMonoid f)
=> (a -> b -> c) -> Sized f n a -> Sized f m b -> Sized f (Min n m) c
zipWith :: (a -> b -> c) -> Sized f n a -> Sized f m b -> Sized f (Min n m) c
zipWith = forall nat (f :: Type -> Type) (n :: nat) a (m :: nat) b c.
(Dom f a, CZip f, Dom f b, CFreeMonoid f, Dom f c) =>
(a -> b -> c) -> Sized f n a -> Sized f m b -> Sized f (Min n m) c
forall (f :: Type -> Type) (n :: Nat) a (m :: Nat) b c.
(Dom f a, CZip f, Dom f b, CFreeMonoid f, Dom f c) =>
(a -> b -> c) -> Sized f n a -> Sized f m b -> Sized f (Min n m) c
S.zipWith @Nat
{-# INLINE zipWithSame #-}
zipWithSame
:: (Dom f a, Dom f b, Dom f c, CZip f, CFreeMonoid f)
=> (a -> b -> c) -> Sized f n a -> Sized f n b -> Sized f n c
zipWithSame :: (a -> b -> c) -> Sized f n a -> Sized f n b -> Sized f n c
zipWithSame = forall nat (f :: Type -> Type) (n :: nat) a b c.
(Dom f a, CZip f, Dom f b, CFreeMonoid f, Dom f c) =>
(a -> b -> c) -> Sized f n a -> Sized f n b -> Sized f n c
forall (f :: Type -> Type) (n :: Nat) a b c.
(Dom f a, CZip f, Dom f b, CFreeMonoid f, Dom f c) =>
(a -> b -> c) -> Sized f n a -> Sized f n b -> Sized f n c
S.zipWithSame @Nat
{-# INLINE unzip #-}
unzip
:: (Dom f a, Dom f b, Dom f (a, b), CUnzip f)
=> Sized f n (a, b) -> (Sized f n a, Sized f n b)
unzip :: Sized f n (a, b) -> (Sized f n a, Sized f n b)
unzip = forall nat (f :: Type -> Type) (n :: nat) a b.
(CUnzip f, Dom f a, Dom f b, Dom f (a, b)) =>
Sized f n (a, b) -> (Sized f n a, Sized f n b)
forall (f :: Type -> Type) (n :: Nat) a b.
(CUnzip f, Dom f a, Dom f b, Dom f (a, b)) =>
Sized f n (a, b) -> (Sized f n a, Sized f n b)
S.unzip @Nat
{-# INLINE unzipWith #-}
unzipWith
:: (Dom f a, Dom f b, Dom f c, CUnzip f)
=> (a -> (b, c)) -> Sized f n a -> (Sized f n b, Sized f n c)
unzipWith :: (a -> (b, c)) -> Sized f n a -> (Sized f n b, Sized f n c)
unzipWith = forall nat (f :: Type -> Type) (n :: nat) a b c.
(CUnzip f, Dom f a, Dom f b, Dom f c) =>
(a -> (b, c)) -> Sized f n a -> (Sized f n b, Sized f n c)
forall (f :: Type -> Type) (n :: Nat) a b c.
(CUnzip f, Dom f a, Dom f b, Dom f c) =>
(a -> (b, c)) -> Sized f n a -> (Sized f n b, Sized f n c)
S.unzipWith @Nat
{-# INLINE map #-}
map
:: (Dom f a, Dom f b, CFreeMonoid f)
=> (a -> b) -> Sized f n a -> Sized f n b
map :: (a -> b) -> Sized f n a -> Sized f n b
map = forall nat (f :: Type -> Type) (n :: nat) a b.
(CFreeMonoid f, Dom f a, Dom f b) =>
(a -> b) -> Sized f n a -> Sized f n b
forall (f :: Type -> Type) (n :: Nat) a b.
(CFreeMonoid f, Dom f a, Dom f b) =>
(a -> b) -> Sized f n a -> Sized f n b
S.map @Nat
{-# INLINE reverse #-}
reverse :: (Dom f a, CFreeMonoid f) => Sized f n a -> Sized f n a
reverse :: Sized f n a -> Sized f n a
reverse = forall nat (f :: Type -> Type) (n :: nat) a.
(Dom f a, CFreeMonoid f) =>
Sized f n a -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(Dom f a, CFreeMonoid f) =>
Sized f n a -> Sized f n a
S.reverse @Nat
{-# INLINE intersperse #-}
intersperse
:: (Dom f a, CFreeMonoid f)
=> a -> Sized f n a -> Sized f ((Two * n) -. One) a
intersperse :: a -> Sized f n a -> Sized f ((Two * n) -. One) a
intersperse = forall nat (f :: Type -> Type) (n :: nat) a.
(CFreeMonoid f, Dom f a) =>
a -> Sized f n a -> Sized f ((FromInteger 2 * n) -. One nat) a
forall (f :: Type -> Type) (n :: Nat) a.
(CFreeMonoid f, Dom f a) =>
a -> Sized f n a -> Sized f ((FromInteger 2 * n) -. One Nat) a
S.intersperse @Nat
{-# INLINE nub #-}
nub :: (Dom f a, Eq a, CFreeMonoid f) => Sized f n a -> SomeSized f a
nub :: Sized f n a -> SomeSized f a
nub = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, Dom f a, Eq a, CFreeMonoid f) =>
Sized f n a -> SomeSized' f nat a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, Dom f a, Eq a, CFreeMonoid f) =>
Sized f n a -> SomeSized' f Nat a
S.nub @Nat
{-# INLINE sort #-}
sort :: (Dom f a, CFreeMonoid f, Ord a) => Sized f n a -> Sized f n a
sort :: Sized f n a -> Sized f n a
sort = forall nat (f :: Type -> Type) (n :: nat) a.
(CFreeMonoid f, Dom f a, Ord a) =>
Sized f n a -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(CFreeMonoid f, Dom f a, Ord a) =>
Sized f n a -> Sized f n a
S.sort @Nat
{-# INLINE sortBy #-}
sortBy
:: (Dom f a, CFreeMonoid f)
=> (a -> a -> Ordering)
-> Sized f n a -> Sized f n a
sortBy :: (a -> a -> Ordering) -> Sized f n a -> Sized f n a
sortBy = forall nat (f :: Type -> Type) (n :: nat) a.
(CFreeMonoid f, Dom f a) =>
(a -> a -> Ordering) -> Sized f n a -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(CFreeMonoid f, Dom f a) =>
(a -> a -> Ordering) -> Sized f n a -> Sized f n a
S.sortBy @Nat
{-# INLINE insert #-}
insert
:: (Dom f a, CFreeMonoid f, Ord a)
=> a -> Sized f n a -> Sized f ('S n) a
insert :: a -> Sized f n a -> Sized f ('S n) a
insert = forall nat (f :: Type -> Type) (n :: nat) a.
(CFreeMonoid f, Dom f a, Ord a) =>
a -> Sized f n a -> Sized f (Succ n) a
forall (f :: Type -> Type) (n :: Nat) a.
(CFreeMonoid f, Dom f a, Ord a) =>
a -> Sized f n a -> Sized f (Succ n) a
S.insert @Nat
{-# INLINE insertBy #-}
insertBy
:: (Dom f a, CFreeMonoid f)
=> (a -> a -> Ordering) -> a -> Sized f n a -> Sized f ('S n) a
insertBy :: (a -> a -> Ordering) -> a -> Sized f n a -> Sized f ('S n) a
insertBy = forall nat (f :: Type -> Type) (n :: nat) a.
(CFreeMonoid f, Dom f a) =>
(a -> a -> Ordering) -> a -> Sized f n a -> Sized f (Succ n) a
forall (f :: Type -> Type) (n :: Nat) a.
(CFreeMonoid f, Dom f a) =>
(a -> a -> Ordering) -> a -> Sized f n a -> Sized f (Succ n) a
S.insertBy @Nat
{-# INLINE toList #-}
toList :: (Dom f a, CFoldable f) => Sized f n a -> [a]
toList :: Sized f n a -> [a]
toList = forall nat (f :: Type -> Type) (n :: nat) a.
(CFoldable f, Dom f a) =>
Sized f n a -> [a]
forall (f :: Type -> Type) (n :: Nat) a.
(CFoldable f, Dom f a) =>
Sized f n a -> [a]
S.toList @Nat
{-# INLINE fromList #-}
fromList :: (Dom f a, CFreeMonoid f) => SNat n -> [a] -> Maybe (Sized f n a)
fromList :: SNat n -> [a] -> Maybe (Sized f n a)
fromList = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, CFreeMonoid f, Dom f a) =>
Sing n -> [a] -> Maybe (Sized f n a)
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, CFreeMonoid f, Dom f a) =>
Sing n -> [a] -> Maybe (Sized f n a)
S.fromList @Nat
{-# INLINE fromList' #-}
fromList' :: (Dom f a, CFreeMonoid f, SingI n) => [a] -> Maybe (Sized f n a)
fromList' :: [a] -> Maybe (Sized f n a)
fromList' = forall nat (f :: Type -> Type) (n :: nat) a.
(PeanoOrder nat, Dom f a, CFreeMonoid f, SingI n) =>
[a] -> Maybe (Sized f n a)
forall (f :: Type -> Type) (n :: Nat) a.
(PeanoOrder Nat, Dom f a, CFreeMonoid f, SingI n) =>
[a] -> Maybe (Sized f n a)
S.fromList' @Nat
{-# INLINE unsafeFromList #-}
unsafeFromList :: (Dom f a, CFreeMonoid f) => SNat n -> [a] -> Sized f n a
unsafeFromList :: SNat n -> [a] -> Sized f n a
unsafeFromList = forall nat (f :: Type -> Type) (n :: nat) a.
(CFreeMonoid f, Dom f a) =>
Sing n -> [a] -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(CFreeMonoid f, Dom f a) =>
Sing n -> [a] -> Sized f n a
S.unsafeFromList @Nat
{-# INLINE unsafeFromList' #-}
unsafeFromList' :: (Dom f a, SingI n, CFreeMonoid f) => [a] -> Sized f n a
unsafeFromList' :: [a] -> Sized f n a
unsafeFromList' = forall nat (f :: Type -> Type) (n :: nat) a.
(SingI n, CFreeMonoid f, Dom f a) =>
[a] -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(SingI n, CFreeMonoid f, Dom f a) =>
[a] -> Sized f n a
S.unsafeFromList' @Nat
{-# INLINE fromListWithDefault #-}
fromListWithDefault :: (Dom f a, CFreeMonoid f) => SNat n -> a -> [a] -> Sized f n a
fromListWithDefault :: SNat n -> a -> [a] -> Sized f n a
fromListWithDefault = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, Dom f a, CFreeMonoid f) =>
Sing n -> a -> [a] -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, Dom f a, CFreeMonoid f) =>
Sing n -> a -> [a] -> Sized f n a
S.fromListWithDefault @Nat
{-# INLINE fromListWithDefault' #-}
fromListWithDefault' :: (Dom f a, SingI n, CFreeMonoid f)
=> a -> [a] -> Sized f n a
fromListWithDefault' :: a -> [a] -> Sized f n a
fromListWithDefault' = forall nat (f :: Type -> Type) (n :: nat) a.
(PeanoOrder nat, SingI n, CFreeMonoid f, Dom f a) =>
a -> [a] -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(PeanoOrder Nat, SingI n, CFreeMonoid f, Dom f a) =>
a -> [a] -> Sized f n a
S.fromListWithDefault' @Nat
{-# INLINE unsized #-}
unsized :: Sized f n a -> f a
unsized :: Sized f n a -> f a
unsized = forall nat (f :: Type -> Type) (n :: nat) a. Sized f n a -> f a
forall (f :: Type -> Type) (n :: Nat) a. Sized f n a -> f a
S.unsized @Nat
{-# INLINE toSized #-}
toSized :: (Dom f a, CFreeMonoid f) => SNat n -> f a -> Maybe (Sized f n a)
toSized :: SNat n -> f a -> Maybe (Sized f n a)
toSized = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, CFreeMonoid f, Dom f a) =>
Sing n -> f a -> Maybe (Sized f n a)
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, CFreeMonoid f, Dom f a) =>
Sing n -> f a -> Maybe (Sized f n a)
S.toSized @Nat
{-# INLINE toSized' #-}
toSized' :: (Dom f a, CFreeMonoid f, SingI n) => f a -> Maybe (Sized f n a)
toSized' :: f a -> Maybe (Sized f n a)
toSized' = forall nat (f :: Type -> Type) (n :: nat) a.
(PeanoOrder nat, Dom f a, CFreeMonoid f, SingI n) =>
f a -> Maybe (Sized f n a)
forall (f :: Type -> Type) (n :: Nat) a.
(PeanoOrder Nat, Dom f a, CFreeMonoid f, SingI n) =>
f a -> Maybe (Sized f n a)
S.toSized' @Nat
{-# INLINE unsafeToSized #-}
unsafeToSized :: SNat n -> f a -> Sized f n a
unsafeToSized :: SNat n -> f a -> Sized f n a
unsafeToSized = forall nat (f :: Type -> Type) (n :: nat) a.
Sing n -> f a -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
Sing n -> f a -> Sized f n a
S.unsafeToSized @Nat
{-# INLINE unsafeToSized' #-}
unsafeToSized' :: (Dom f a, SingI n) => f a -> Sized f n a
unsafeToSized' :: f a -> Sized f n a
unsafeToSized' = forall nat (f :: Type -> Type) (n :: nat) a.
(SingI n, Dom f a) =>
f a -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(SingI n, Dom f a) =>
f a -> Sized f n a
S.unsafeToSized' @Nat
{-# INLINE toSizedWithDefault #-}
toSizedWithDefault :: (Dom f a, CFreeMonoid f) => SNat n -> a -> f a -> Sized f n a
toSizedWithDefault :: SNat n -> a -> f a -> Sized f n a
toSizedWithDefault = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, CFreeMonoid f, Dom f a) =>
Sing n -> a -> f a -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, CFreeMonoid f, Dom f a) =>
Sing n -> a -> f a -> Sized f n a
S.toSizedWithDefault @Nat
{-# INLINE toSizedWithDefault' #-}
toSizedWithDefault' :: (Dom f a, SingI n, CFreeMonoid f)
=> a -> f a -> Sized f n a
toSizedWithDefault' :: a -> f a -> Sized f n a
toSizedWithDefault' = forall nat (f :: Type -> Type) (n :: nat) a.
(PeanoOrder nat, SingI n, CFreeMonoid f, Dom f a) =>
a -> f a -> Sized f n a
forall (f :: Type -> Type) (n :: Nat) a.
(PeanoOrder Nat, SingI n, CFreeMonoid f, Dom f a) =>
a -> f a -> Sized f n a
S.toSizedWithDefault' @Nat
type Partitioned f (n :: Nat) a = S.Partitioned f n a
pattern Partitioned
:: forall (f :: Type -> Type) (n :: Nat) a. ()
=> forall (n1 :: Nat) (m :: Nat). (n ~ (n1 + m), Dom f a)
=> SNat n1 -> Sized f n1 a -> SNat m
-> Sized f m a -> Partitioned f n a
{-# COMPLETE Partitioned #-}
pattern $bPartitioned :: SNat n1
-> Sized f n1 a -> SNat m -> Sized f m a -> Partitioned f n a
$mPartitioned :: forall r (f :: Type -> Type) (n :: Nat) a.
Partitioned f n a
-> (forall (n1 :: Nat) (m :: Nat).
(n ~ (n1 + m), Dom f a) =>
SNat n1 -> Sized f n1 a -> SNat m -> Sized f m a -> r)
-> (Void# -> r)
-> r
Partitioned ls l rs r = S.Partitioned ls l rs r
{-# INLINE takeWhile #-}
takeWhile :: (Dom f a, CFreeMonoid f) => (a -> Bool) -> Sized f n a -> SomeSized f a
takeWhile :: (a -> Bool) -> Sized f n a -> SomeSized f a
takeWhile = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, Dom f a, CFreeMonoid f) =>
(a -> Bool) -> Sized f n a -> SomeSized' f nat a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, Dom f a, CFreeMonoid f) =>
(a -> Bool) -> Sized f n a -> SomeSized' f Nat a
S.takeWhile @Nat
{-# INLINE dropWhile #-}
dropWhile :: (Dom f a, CFreeMonoid f) => (a -> Bool) -> Sized f n a -> SomeSized f a
dropWhile :: (a -> Bool) -> Sized f n a -> SomeSized f a
dropWhile = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, CFreeMonoid f, Dom f a) =>
(a -> Bool) -> Sized f n a -> SomeSized' f nat a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, CFreeMonoid f, Dom f a) =>
(a -> Bool) -> Sized f n a -> SomeSized' f Nat a
S.dropWhile @Nat
{-# INLINE span #-}
span :: (Dom f a, CFreeMonoid f) => (a -> Bool) -> Sized f n a -> Partitioned f n a
span :: (a -> Bool) -> Sized f n a -> Partitioned f n a
span = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, CFreeMonoid f, Dom f a) =>
(a -> Bool) -> Sized f n a -> Partitioned f n a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, CFreeMonoid f, Dom f a) =>
(a -> Bool) -> Sized f n a -> Partitioned f n a
S.span @Nat
{-# INLINE break #-}
break :: (Dom f a, CFreeMonoid f) => (a -> Bool) -> Sized f n a -> Partitioned f n a
break :: (a -> Bool) -> Sized f n a -> Partitioned f n a
break = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, CFreeMonoid f, Dom f a) =>
(a -> Bool) -> Sized f n a -> Partitioned f n a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, CFreeMonoid f, Dom f a) =>
(a -> Bool) -> Sized f n a -> Partitioned f n a
S.break @Nat
{-# INLINE partition #-}
partition :: (Dom f a, CFreeMonoid f) => (a -> Bool) -> Sized f n a -> Partitioned f n a
partition :: (a -> Bool) -> Sized f n a -> Partitioned f n a
partition = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, CFreeMonoid f, Dom f a) =>
(a -> Bool) -> Sized f n a -> Partitioned f n a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, CFreeMonoid f, Dom f a) =>
(a -> Bool) -> Sized f n a -> Partitioned f n a
S.partition @Nat
{-# INLINE elem #-}
elem :: (Dom f a, CFoldable f, Eq a) => a -> Sized f n a -> Bool
elem :: a -> Sized f n a -> Bool
elem = forall nat (f :: Type -> Type) (n :: nat) a.
(CFoldable f, Dom f a, Eq a) =>
a -> Sized f n a -> Bool
forall (f :: Type -> Type) (n :: Nat) a.
(CFoldable f, Dom f a, Eq a) =>
a -> Sized f n a -> Bool
S.elem @Nat
{-# INLINE notElem #-}
notElem :: (Dom f a, CFoldable f, Eq a) => a -> Sized f n a -> Bool
notElem :: a -> Sized f n a -> Bool
notElem = forall nat (f :: Type -> Type) (n :: nat) a.
(CFoldable f, Dom f a, Eq a) =>
a -> Sized f n a -> Bool
forall (f :: Type -> Type) (n :: Nat) a.
(CFoldable f, Dom f a, Eq a) =>
a -> Sized f n a -> Bool
S.notElem @Nat
{-# INLINE find #-}
find :: (Dom f a, CFoldable f) => (a -> Bool) -> Sized f n a -> Maybe a
find :: (a -> Bool) -> Sized f n a -> Maybe a
find = forall nat (f :: Type -> Type) (n :: nat) a.
(CFoldable f, Dom f a) =>
(a -> Bool) -> Sized f n a -> Maybe a
forall (f :: Type -> Type) (n :: Nat) a.
(CFoldable f, Dom f a) =>
(a -> Bool) -> Sized f n a -> Maybe a
S.find @Nat
{-# INLINE findIndex #-}
findIndex :: (Dom f a, CFoldable f) => (a -> Bool) -> Sized f n a -> Maybe Int
findIndex :: (a -> Bool) -> Sized f n a -> Maybe Int
findIndex = forall nat (f :: Type -> Type) (n :: nat) a.
(CFoldable f, Dom f a) =>
(a -> Bool) -> Sized f n a -> Maybe Int
forall (f :: Type -> Type) (n :: Nat) a.
(CFoldable f, Dom f a) =>
(a -> Bool) -> Sized f n a -> Maybe Int
S.findIndex @Nat
{-# INLINE sFindIndex #-}
sFindIndex :: (Dom f a, SingI n, CFoldable f) => (a -> Bool) -> Sized f n a -> Maybe (Ordinal n)
sFindIndex :: (a -> Bool) -> Sized f n a -> Maybe (Ordinal n)
sFindIndex = forall nat (f :: Type -> Type) (n :: nat) a.
(SingI n, CFoldable f, Dom f a, HasOrdinal nat) =>
(a -> Bool) -> Sized f n a -> Maybe (Ordinal n)
forall (f :: Type -> Type) (n :: Nat) a.
(SingI n, CFoldable f, Dom f a, HasOrdinal Nat) =>
(a -> Bool) -> Sized f n a -> Maybe (Ordinal n)
S.sFindIndex @Nat
{-# INLINE findIndices #-}
findIndices :: (Dom f a, CFoldable f) => (a -> Bool) -> Sized f n a -> [Int]
findIndices :: (a -> Bool) -> Sized f n a -> [Int]
findIndices = forall nat (f :: Type -> Type) (n :: nat) a.
(CFoldable f, Dom f a) =>
(a -> Bool) -> Sized f n a -> [Int]
forall (f :: Type -> Type) (n :: Nat) a.
(CFoldable f, Dom f a) =>
(a -> Bool) -> Sized f n a -> [Int]
S.findIndices @Nat
{-# INLINE sFindIndices #-}
sFindIndices :: (Dom f a, CFoldable f, SingI n) => (a -> Bool) -> Sized f n a -> [Ordinal n]
sFindIndices :: (a -> Bool) -> Sized f n a -> [Ordinal n]
sFindIndices = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, CFoldable f, Dom f a, SingI n) =>
(a -> Bool) -> Sized f n a -> [Ordinal n]
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, CFoldable f, Dom f a, SingI n) =>
(a -> Bool) -> Sized f n a -> [Ordinal n]
S.sFindIndices @Nat
{-# INLINE elemIndex #-}
elemIndex :: (Dom f a, CFoldable f, Eq a) => a -> Sized f n a -> Maybe Int
elemIndex :: a -> Sized f n a -> Maybe Int
elemIndex = forall nat (f :: Type -> Type) (n :: nat) a.
(CFoldable f, Eq a, Dom f a) =>
a -> Sized f n a -> Maybe Int
forall (f :: Type -> Type) (n :: Nat) a.
(CFoldable f, Eq a, Dom f a) =>
a -> Sized f n a -> Maybe Int
S.elemIndex @Nat
sElemIndex, sUnsafeElemIndex :: (Dom f a, SingI n, CFoldable f, Eq a) => a -> Sized f n a -> Maybe (Ordinal n)
{-# DEPRECATED sUnsafeElemIndex "Use sElemIndex instead" #-}
sUnsafeElemIndex :: a -> Sized f n a -> Maybe (Ordinal n)
sUnsafeElemIndex = forall nat (f :: Type -> Type) (n :: nat) a.
(SingI n, CFoldable f, Dom f a, Eq a, HasOrdinal nat) =>
a -> Sized f n a -> Maybe (Ordinal n)
forall (f :: Type -> Type) (n :: Nat) a.
(SingI n, CFoldable f, Dom f a, Eq a, HasOrdinal Nat) =>
a -> Sized f n a -> Maybe (Ordinal n)
S.sElemIndex @Nat
sElemIndex :: a -> Sized f n a -> Maybe (Ordinal n)
sElemIndex = forall nat (f :: Type -> Type) (n :: nat) a.
(SingI n, CFoldable f, Dom f a, Eq a, HasOrdinal nat) =>
a -> Sized f n a -> Maybe (Ordinal n)
forall (f :: Type -> Type) (n :: Nat) a.
(SingI n, CFoldable f, Dom f a, Eq a, HasOrdinal Nat) =>
a -> Sized f n a -> Maybe (Ordinal n)
S.sElemIndex @Nat
{-# INLINE elemIndices #-}
elemIndices :: (Dom f a, CFoldable f, Eq a) => a -> Sized f n a -> [Int]
elemIndices :: a -> Sized f n a -> [Int]
elemIndices = forall nat (f :: Type -> Type) (n :: nat) a.
(CFoldable f, Dom f a, Eq a) =>
a -> Sized f n a -> [Int]
forall (f :: Type -> Type) (n :: Nat) a.
(CFoldable f, Dom f a, Eq a) =>
a -> Sized f n a -> [Int]
S.elemIndices @Nat
{-# INLINE sElemIndices #-}
sElemIndices
:: (Dom f a, CFoldable f, SingI n, Eq a)
=> a -> Sized f n a -> [Ordinal n]
sElemIndices :: a -> Sized f n a -> [Ordinal n]
sElemIndices = forall nat (f :: Type -> Type) (n :: nat) a.
(CFoldable f, HasOrdinal nat, SingI n, Dom f a, Eq a) =>
a -> Sized f n a -> [Ordinal n]
forall (f :: Type -> Type) (n :: Nat) a.
(CFoldable f, HasOrdinal Nat, SingI n, Dom f a, Eq a) =>
a -> Sized f n a -> [Ordinal n]
S.sElemIndices @Nat
type ConsView f (n :: Nat) a = S.ConsView f n a
pattern NilCV
:: forall (f :: Type -> Type) n a. ()
=> (n ~ 'Z)
=> ConsView f n a
pattern $bNilCV :: ConsView f n a
$mNilCV :: forall r (f :: Type -> Type) (n :: Nat) a.
ConsView f n a -> ((n ~ 'Z) => r) -> (Void# -> r) -> r
NilCV = S.NilCV
pattern (:-)
:: forall (f :: Type -> Type) n a. ()
=> forall n1. (n ~ (One + n1), SingI n1)
=> a -> Sized f n1 a -> ConsView f n a
pattern l $b:- :: a -> Sized f n1 a -> ConsView f n a
$m:- :: forall r (f :: Type -> Type) (n :: Nat) a.
ConsView f n a
-> (forall (n1 :: Nat).
(n ~ (One + n1), SingI n1) =>
a -> Sized f n1 a -> r)
-> (Void# -> r)
-> r
:- ls = l S.:- ls
infixr 9 :-
{-# COMPLETE NilCV, (:-) #-}
viewCons :: (Dom f a, SingI n, CFreeMonoid f) => Sized f n a -> ConsView f n a
viewCons :: Sized f n a -> ConsView f n a
viewCons = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, SingI n, CFreeMonoid f, Dom f a) =>
Sized f n a -> ConsView f n a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, SingI n, CFreeMonoid f, Dom f a) =>
Sized f n a -> ConsView f n a
S.viewCons @Nat
type SnocView f (n :: Nat) a = S.SnocView f n a
pattern NilSV
:: forall (f :: Type -> Type) n a. ()
=> (n ~ 'Z)
=> SnocView f n a
pattern $bNilSV :: SnocView f n a
$mNilSV :: forall r (f :: Type -> Type) (n :: Nat) a.
SnocView f n a -> ((n ~ 'Z) => r) -> (Void# -> r) -> r
NilSV = S.NilSV
infixl 9 :-::
pattern (:-::)
:: forall (f :: Type -> Type) n a. ()
=> forall n1. (n ~ (n1 + One), SingI n1)
=> Sized f n1 a -> a -> SnocView f n a
pattern ls $b:-:: :: Sized f n1 a -> a -> SnocView f n a
$m:-:: :: forall r (f :: Type -> Type) (n :: Nat) a.
SnocView f n a
-> (forall (n1 :: Nat).
(n ~ (n1 + One), SingI n1) =>
Sized f n1 a -> a -> r)
-> (Void# -> r)
-> r
:-:: l = ls S.:-:: l
{-# COMPLETE NilSV, (:-::) #-}
viewSnoc :: (Dom f a, SingI n, CFreeMonoid f) => Sized f n a -> ConsView f n a
viewSnoc :: Sized f n a -> ConsView f n a
viewSnoc = forall nat (f :: Type -> Type) (n :: nat) a.
(HasOrdinal nat, SingI n, CFreeMonoid f, Dom f a) =>
Sized f n a -> ConsView f n a
forall (f :: Type -> Type) (n :: Nat) a.
(HasOrdinal Nat, SingI n, CFreeMonoid f, Dom f a) =>
Sized f n a -> ConsView f n a
S.viewCons @Nat
pattern (:<)
:: forall (f :: Type -> Type) a (n :: Nat).
(Dom f a, SingI n, CFreeMonoid f)
=> forall (n1 :: Nat). (n ~ Succ n1, SingI n1)
=> a -> Sized f n1 a -> Sized f n a
pattern a $b:< :: a -> Sized f n1 a -> Sized f n a
$m:< :: forall r (f :: Type -> Type) a (n :: Nat).
(Dom f a, SingI n, CFreeMonoid f) =>
Sized f n a
-> (forall (n1 :: Nat).
(n ~ Succ n1, SingI n1) =>
a -> Sized f n1 a -> r)
-> (Void# -> r)
-> r
:< b = a S.:< b
infixr 5 :<
pattern Nil
:: forall (f :: Type -> Type) a n.
(Dom f a, SingI n, CFreeMonoid f)
=> (n ~ 'Z) => Sized f n a
pattern $bNil :: Sized f n a
$mNil :: forall r (f :: Type -> Type) a (n :: Nat).
(Dom f a, SingI n, CFreeMonoid f) =>
Sized f n a -> ((n ~ 'Z) => r) -> (Void# -> r) -> r
Nil = S.Nil
pattern NilL :: forall f (n :: Nat) a.
(SingI n, CFreeMonoid f, Dom f a)
=> n ~ 'Z => Sized f n a
pattern $bNilL :: Sized f n a
$mNilL :: forall r (f :: Type -> Type) (n :: Nat) a.
(SingI n, CFreeMonoid f, Dom f a) =>
Sized f n a -> ((n ~ 'Z) => r) -> (Void# -> r) -> r
NilL = Nil
pattern (:>)
:: forall (f :: Type -> Type) a (n :: Nat).
(Dom f a, SingI n, CFreeMonoid f)
=> forall (n1 :: Nat). (n ~ (n1 + One), SingI n1)
=> Sized f n1 a -> a -> Sized f n a
pattern a $b:> :: Sized f n1 a -> a -> Sized f n a
$m:> :: forall r (f :: Type -> Type) a (n :: Nat).
(Dom f a, SingI n, CFreeMonoid f) =>
Sized f n a
-> (forall (n1 :: Nat).
(n ~ (n1 + One), SingI n1) =>
Sized f n1 a -> a -> r)
-> (Void# -> r)
-> r
:> b = a S.:> b
infixl 5 :>
pattern NilR :: forall f (n :: Nat) a.
(CFreeMonoid f, Dom f a, SingI n)
=> n ~ 'Z => Sized f n a
pattern $bNilR :: Sized f n a
$mNilR :: forall r (f :: Type -> Type) (n :: Nat) a.
(CFreeMonoid f, Dom f a, SingI n) =>
Sized f n a -> ((n ~ 'Z) => r) -> (Void# -> r) -> r
NilR = Nil
{-# COMPLETE (:<), NilL #-}
{-# COMPLETE (:<), NilR #-}
{-# COMPLETE (:<), Nil #-}
{-# COMPLETE (:>), NilL #-}
{-# COMPLETE (:>), NilR #-}
{-# COMPLETE (:>), Nil #-}