packages feed

hydra-0.8.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 = (:)

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

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

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

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]

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

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

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