-- | Haskell implementations of hydra/lib/lists primitives

module Hydra.Lib.Lists where

import qualified Data.List as L


apply :: [a -> b] -> [a] -> [b]
apply :: forall a b. [a -> b] -> [a] -> [b]
apply = forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
(<*>)

bind :: [a] -> (a -> [b]) -> [b]
bind :: forall a b. [a] -> (a -> [b]) -> [b]
bind = forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
(>>=)

concat :: [[a]] -> [a]
concat :: forall a. [[a]] -> [a]
concat = forall (t :: * -> *) a. Foldable t => t [a] -> [a]
L.concat

head :: [a] -> a
head :: forall a. [a] -> a
head = forall a. [a] -> a
L.head

intercalate :: [a] -> [[a]] -> [a]
intercalate :: forall a. [a] -> [[a]] -> [a]
intercalate = forall a. [a] -> [[a]] -> [a]
L.intercalate

intersperse :: a -> [a] -> [a]
intersperse :: forall a. a -> [a] -> [a]
intersperse = forall a. a -> [a] -> [a]
L.intersperse

last :: [a] -> a
last :: forall a. [a] -> a
last = forall a. [a] -> a
L.last

length :: [a] -> Int
length :: forall a. [a] -> Int
length = forall (t :: * -> *) a. Foldable t => t a -> Int
L.length

map :: (a -> b) -> [a] -> [b]
map :: forall a b. (a -> b) -> [a] -> [b]
map = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap

pure :: a -> [a]
pure :: forall a. a -> [a]
pure a
x = [a
x]