hydra-0.13.0: src/main/haskell/Hydra/Dsl/Meta/Lib/Lists.hs
-- | Phantom-typed term DSL for the hydra.lib.lists library
{-# LANGUAGE FlexibleContexts #-}
module Hydra.Dsl.Meta.Lib.Lists where
import Hydra.Phantoms
import Hydra.Dsl.AsTerm
import Hydra.Dsl.Meta.Phantoms
import qualified Hydra.Dsl.Terms as Terms
import Hydra.Sources.Libraries
apply :: TTerm [a -> b] -> TTerm [a] -> TTerm [b]
apply = primitive2 _lists_apply
at :: TTerm Int -> TTerm [a] -> TTerm a
at = primitive2 _lists_at
bind :: TTerm [a] -> TTerm (a -> [b]) -> TTerm [b]
bind = primitive2 _lists_bind
concat :: TTerm [[a]] -> TTerm [a]
concat = primitive1 _lists_concat
concat2 :: TTerm [a] -> TTerm [a] -> TTerm [a]
concat2 = primitive2 _lists_concat2
cons :: TTerm a -> TTerm [a] -> TTerm [a]
cons = primitive2 _lists_cons
drop :: TTerm Int -> TTerm [a] -> TTerm [a]
drop = primitive2 _lists_drop
dropWhile :: TTerm (a -> Bool) -> TTerm [a] -> TTerm [a]
dropWhile = primitive2 _lists_dropWhile
elem :: Eq a => TTerm a -> TTerm [a] -> TTerm Bool
elem = primitive2 _lists_elem
filter :: AsTerm t [a] => TTerm (a -> Bool) -> t -> TTerm [a]
filter p xs = primitive2 _lists_filter p (asTerm xs)
find :: TTerm (a -> Bool) -> TTerm [a] -> TTerm (Maybe a)
find = primitive2 _lists_find
foldl :: AsTerm f (b -> a -> b) => f -> TTerm b -> TTerm [a] -> TTerm b
foldl f = primitive3 _lists_foldl (asTerm f)
group :: Eq a => TTerm [a] -> TTerm [[a]]
group = primitive1 _lists_group
head :: TTerm [a] -> TTerm a
head = primitive1 _lists_head
init :: TTerm [a] -> TTerm [a]
init = primitive1 _lists_init
intercalate :: TTerm [a] -> TTerm [[a]] -> TTerm [a]
intercalate = primitive2 _lists_intercalate
intersperse :: TTerm a -> TTerm [a] -> TTerm [a]
intersperse = primitive2 _lists_intersperse
last :: TTerm [a] -> TTerm a
last = primitive1 _lists_last
length :: TTerm [a] -> TTerm Int
length = primitive1 _lists_length
-- | Map a function over a list
-- Accepts TTerm or TBinding for both arguments (via AsTerm)
map :: (AsTerm f (a -> b), AsTerm t [a]) => f -> t -> TTerm [b]
map f l = primitive2 _lists_map (asTerm f) (asTerm l)
nub :: Eq a => TTerm [a] -> TTerm [a]
nub = primitive1 _lists_nub
null :: TTerm [a] -> TTerm Bool
null = primitive1 _lists_null
partition :: TTerm (a -> Bool) -> TTerm [a] -> TTerm ([a], [a])
partition = primitive2 _lists_partition
pure :: TTerm a -> TTerm [a]
pure = primitive1 _lists_pure
replicate :: AsTerm t a => TTerm Int -> t -> TTerm [a]
replicate n x = primitive2 _lists_replicate n (asTerm x)
reverse :: TTerm [a] -> TTerm [a]
reverse = primitive1 _lists_reverse
safeHead :: TTerm [a] -> TTerm (Maybe a)
safeHead = primitive1 _lists_safeHead
singleton :: TTerm a -> TTerm [a]
singleton = primitive1 _lists_singleton
sort :: TTerm [a] -> TTerm [a]
sort = primitive1 _lists_sort
sortOn :: TTerm (a -> b) -> TTerm [a] -> TTerm [a]
sortOn = primitive2 _lists_sortOn
span :: TTerm (a -> Bool) -> TTerm [a] -> TTerm ([a], [a])
span = primitive2 _lists_span
tail :: TTerm [a] -> TTerm [a]
tail = primitive1 _lists_tail
take :: TTerm Int -> TTerm [a] -> TTerm [a]
take = primitive2 _lists_take
transpose :: TTerm [[a]] -> TTerm [[a]]
transpose = primitive1 _lists_transpose
zip :: TTerm [a] -> TTerm [b] -> TTerm [(a, b)]
zip = primitive2 _lists_zip
zipWith :: TTerm (a -> b -> c) -> TTerm [a] -> TTerm [b] -> TTerm [c]
zipWith = primitive3 _lists_zipWith