module List
( List,
singleton,
repeat,
range,
map,
indexedMap,
foldl,
foldr,
filter,
filterMap,
length,
reverse,
member,
all,
any,
maximum,
minimum,
sum,
product,
append,
concat,
concatMap,
intersperse,
map2,
map3,
map4,
map5,
sort,
sortBy,
sortWith,
isEmpty,
head,
tail,
take,
drop,
partition,
unzip,
)
where
import Basics (Bool (..), Int, Num, Ord, Ordering (..), (-), (>>))
import qualified Data.Foldable
import qualified Data.List
import qualified Data.Maybe
import qualified Internal.Shortcut as Shortcut
import Maybe (Maybe (..))
import qualified Prelude
type List a = [a]
singleton :: a -> List a
singleton :: a -> List a
singleton a
value = [a
value]
repeat :: Int -> a -> List a
repeat :: Int -> a -> List a
repeat =
Int -> Int
forall a b. (Integral a, Num b) => a -> b
Prelude.fromIntegral (Int -> Int) -> (Int -> a -> List a) -> Int -> a -> List a
forall a b c. (a -> b) -> (b -> c) -> a -> c
>> Int -> a -> List a
forall a. Int -> a -> [a]
Data.List.replicate
range :: Int -> Int -> List Int
range :: Int -> Int -> List Int
range Int
lo Int
hi =
[Int
lo .. Int
hi]
map :: (a -> b) -> List a -> List b
map :: (a -> b) -> List a -> List b
map =
(a -> b) -> List a -> List b
forall (m :: * -> *) a value.
Functor m =>
(a -> value) -> m a -> m value
Shortcut.map
indexedMap :: (Int -> a -> b) -> List a -> List b
indexedMap :: (Int -> a -> b) -> List a -> List b
indexedMap Int -> a -> b
f List a
xs =
(Int -> a -> b) -> List Int -> List a -> List b
forall a b result.
(a -> b -> result) -> List a -> List b -> List result
map2 Int -> a -> b
f [Int
0 .. (List a -> Int
forall a. List a -> Int
length List a
xs Int -> Int -> Int
forall number. Num number => number -> number -> number
- Int
1)] List a
xs
foldl :: (a -> b -> b) -> b -> List a -> b
foldl :: (a -> b -> b) -> b -> List a -> b
foldl a -> b -> b
func =
(b -> a -> b) -> b -> List a -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
Data.List.foldl' (\b
a a
b -> a -> b -> b
func a
b b
a)
foldr :: (a -> b -> b) -> b -> List a -> b
foldr :: (a -> b -> b) -> b -> List a -> b
foldr =
(a -> b -> b) -> b -> List a -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
Data.List.foldr
filter :: (a -> Bool) -> List a -> List a
filter :: (a -> Bool) -> List a -> List a
filter =
(a -> Bool) -> List a -> List a
forall a. (a -> Bool) -> [a] -> [a]
Data.List.filter
filterMap :: (a -> Maybe b) -> List a -> List b
filterMap :: (a -> Maybe b) -> List a -> List b
filterMap =
(a -> Maybe b) -> List a -> List b
forall a b. (a -> Maybe b) -> [a] -> [b]
Data.Maybe.mapMaybe
length :: List a -> Int
length :: List a -> Int
length =
List a -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
Data.List.length (List a -> Int) -> (Int -> Int) -> List a -> Int
forall a b c. (a -> b) -> (b -> c) -> a -> c
>> Int -> Int
forall a b. (Integral a, Num b) => a -> b
Prelude.fromIntegral
reverse :: List a -> List a
reverse :: List a -> List a
reverse =
List a -> List a
forall a. [a] -> [a]
Data.List.reverse
member :: Prelude.Eq a => a -> List a -> Bool
member :: a -> List a -> Bool
member =
a -> List a -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
Data.List.elem
all :: (a -> Bool) -> List a -> Bool
all :: (a -> Bool) -> List a -> Bool
all =
(a -> Bool) -> List a -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
Data.List.all
any :: (a -> Bool) -> List a -> Bool
any :: (a -> Bool) -> List a -> Bool
any =
(a -> Bool) -> List a -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
Data.List.any
maximum :: Ord a => List a -> Maybe a
maximum :: List a -> Maybe a
maximum List a
list =
case List a
list of
[] ->
Maybe a
forall a. Maybe a
Nothing
List a
_ ->
a -> Maybe a
forall a. a -> Maybe a
Just (List a -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
Data.List.maximum List a
list)
minimum :: Ord a => List a -> Maybe a
minimum :: List a -> Maybe a
minimum List a
list =
case List a
list of
[] ->
Maybe a
forall a. Maybe a
Nothing
List a
_ ->
a -> Maybe a
forall a. a -> Maybe a
Just (List a -> a
forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
Data.List.minimum List a
list)
sum :: Num a => List a -> a
sum :: List a -> a
sum =
List a -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
Data.Foldable.sum
product :: Num a => List a -> a
product :: List a -> a
product =
List a -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
Data.Foldable.product
append :: List a -> List a -> List a
append :: List a -> List a -> List a
append =
List a -> List a -> List a
forall a. Monoid a => a -> a -> a
Prelude.mappend
concat :: List (List a) -> List a
concat :: List (List a) -> List a
concat =
List (List a) -> List a
forall a. Monoid a => [a] -> a
Prelude.mconcat
concatMap :: (a -> List b) -> List a -> List b
concatMap :: (a -> List b) -> List a -> List b
concatMap =
(a -> List b) -> List a -> List b
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
Shortcut.andThen
intersperse :: a -> List a -> List a
intersperse :: a -> List a -> List a
intersperse =
a -> List a -> List a
forall a. a -> [a] -> [a]
Data.List.intersperse
map2 :: (a -> b -> result) -> List a -> List b -> List result
map2 :: (a -> b -> result) -> List a -> List b -> List result
map2 =
(a -> b -> result) -> List a -> List b -> List result
forall a b result.
(a -> b -> result) -> List a -> List b -> List result
Data.List.zipWith
map3 :: (a -> b -> c -> result) -> List a -> List b -> List c -> List result
map3 :: (a -> b -> c -> result)
-> List a -> List b -> List c -> List result
map3 =
(a -> b -> c -> result)
-> List a -> List b -> List c -> List result
forall a b c d. (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]
Data.List.zipWith3
map4 :: (a -> b -> c -> d -> result) -> List a -> List b -> List c -> List d -> List result
map4 :: (a -> b -> c -> d -> result)
-> List a -> List b -> List c -> List d -> List result
map4 =
(a -> b -> c -> d -> result)
-> List a -> List b -> List c -> List d -> List result
forall a b c d e.
(a -> b -> c -> d -> e) -> [a] -> [b] -> [c] -> [d] -> [e]
Data.List.zipWith4
map5 :: (a -> b -> c -> d -> e -> result) -> List a -> List b -> List c -> List d -> List e -> List result
map5 :: (a -> b -> c -> d -> e -> result)
-> List a -> List b -> List c -> List d -> List e -> List result
map5 =
(a -> b -> c -> d -> e -> result)
-> List a -> List b -> List c -> List d -> List e -> List result
forall a b c d e f.
(a -> b -> c -> d -> e -> f)
-> [a] -> [b] -> [c] -> [d] -> [e] -> [f]
Data.List.zipWith5
sort :: Ord a => List a -> List a
sort :: List a -> List a
sort =
List a -> List a
forall a. Ord a => [a] -> [a]
Data.List.sort
sortBy :: Ord b => (a -> b) -> List a -> List a
sortBy :: (a -> b) -> List a -> List a
sortBy =
(a -> b) -> List a -> List a
forall b a. Ord b => (a -> b) -> [a] -> [a]
Data.List.sortOn
sortWith :: (a -> a -> Ordering) -> List a -> List a
sortWith :: (a -> a -> Ordering) -> List a -> List a
sortWith =
(a -> a -> Ordering) -> List a -> List a
forall a. (a -> a -> Ordering) -> [a] -> [a]
Data.List.sortBy
isEmpty :: List a -> Bool
isEmpty :: List a -> Bool
isEmpty =
List a -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
Data.List.null
head :: List a -> Maybe a
head :: List a -> Maybe a
head List a
xs =
case List a
xs of
a
x : List a
_ ->
a -> Maybe a
forall a. a -> Maybe a
Just a
x
[] ->
Maybe a
forall a. Maybe a
Nothing
tail :: List a -> Maybe (List a)
tail :: List a -> Maybe (List a)
tail List a
list =
case List a
list of
a
_ : List a
xs ->
List a -> Maybe (List a)
forall a. a -> Maybe a
Just List a
xs
[] ->
Maybe (List a)
forall a. Maybe a
Nothing
take :: Int -> List a -> List a
take :: Int -> List a -> List a
take =
Int -> Int
forall a b. (Integral a, Num b) => a -> b
Prelude.fromIntegral (Int -> Int)
-> (Int -> List a -> List a) -> Int -> List a -> List a
forall a b c. (a -> b) -> (b -> c) -> a -> c
>> Int -> List a -> List a
forall a. Int -> [a] -> [a]
Data.List.take
drop :: Int -> List a -> List a
drop :: Int -> List a -> List a
drop =
Int -> Int
forall a b. (Integral a, Num b) => a -> b
Prelude.fromIntegral (Int -> Int)
-> (Int -> List a -> List a) -> Int -> List a -> List a
forall a b c. (a -> b) -> (b -> c) -> a -> c
>> Int -> List a -> List a
forall a. Int -> [a] -> [a]
Data.List.drop
partition :: (a -> Bool) -> List a -> (List a, List a)
partition :: (a -> Bool) -> List a -> (List a, List a)
partition =
(a -> Bool) -> List a -> (List a, List a)
forall a. (a -> Bool) -> [a] -> ([a], [a])
Data.List.partition
unzip :: List (a, b) -> (List a, List b)
unzip :: List (a, b) -> (List a, List b)
unzip =
List (a, b) -> (List a, List b)
forall a b. [(a, b)] -> ([a], [b])
Data.List.unzip