packages feed

hydra-0.12.0: src/main/haskell/Hydra/Lib/Lists.hs

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

module Hydra.Lib.Lists where

import Hydra.Compute
import Hydra.Core
import Hydra.Graph
import qualified Hydra.Dsl.Terms as Terms

import qualified Data.List as L


apply :: [a -> b] -> [a] -> [b]
apply = (<*>)

at :: Int -> [a] -> a
at i l = l !! i

bind :: [a] -> (a -> [b]) -> [b]
bind = (>>=)

concat :: [[a]] -> [a]
concat = L.concat

concat2 :: [a] -> [a] -> [a]
concat2 l1 l2 = l1 ++ l2

cons :: a -> [a] -> [a]
cons = (:)

drop :: Int -> [a] -> [a]
drop = L.drop

dropWhile :: (a -> Bool) -> [a] -> [a]
dropWhile = L.dropWhile

elem :: Eq a => a -> [a] -> Bool
elem = L.elem

filter :: (a -> Bool) -> [a] -> [a]
filter = L.filter

foldl :: (b -> a -> b) -> b -> [a] -> b
foldl = L.foldl

group :: Eq a => [a] -> [[a]]
group = L.group

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

init :: [a] -> [a]
init = L.init

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

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

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

length :: [a] -> Int
length = L.length

map :: (a -> b) -> [a] -> [b]
map = fmap

nub :: Eq a => [a] -> [a]
nub = L.nub

null :: [a] -> Bool
null = L.null

pure :: a -> [a]
pure e = [e]

replicate :: Int -> a -> [a]
replicate = L.replicate

reverse :: [a] -> [a]
reverse = L.reverse

safeHead :: [a] -> Maybe a
safeHead [] = Nothing
safeHead (x:_) = Just x

singleton :: a -> [a]
singleton e = [e]

sort :: Ord a => [a] -> [a]
sort = L.sort

sortOn :: Ord b => (a -> b) -> [a] -> [a]
sortOn = L.sortOn

span :: (a -> Bool) -> [a] -> ([a], [a])
span = L.span

tail :: [a] -> [a]
tail = L.tail

take :: Int -> [a] -> [a]
take = L.take

transpose :: [[a]] -> [[a]]
transpose = L.transpose

zip :: [a] -> [b] -> [(a, b)]
zip = L.zip

zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
zipWith = L.zipWith