module IdeSession.Strict.List (
nil
, cons
, singleton
, map
, all
, any
, reverse
, (++)
, elem
, (\\)
) where
import Prelude hiding (map, all, any, reverse, (++), elem)
import qualified Data.List as List
import IdeSession.Strict.Container
nil :: Strict [] a
nil = StrictList []
cons :: a -> Strict [] a -> Strict [] a
cons x xs = x `seq` StrictList (x : toLazyList xs)
singleton :: a -> Strict [] a
singleton x = x `seq` StrictList [x]
map :: (a -> b) -> Strict [] a -> Strict [] b
map f = force . List.map f . toLazyList
all :: (a -> Bool) -> Strict [] a -> Bool
all p = List.all p . toLazyList
any :: (a -> Bool) -> Strict [] a -> Bool
any p = List.any p . toLazyList
elem :: Eq a => a -> Strict [] a -> Bool
elem x = List.elem x . toLazyList
reverse :: Strict [] a -> Strict [] a
reverse = StrictList . List.reverse . toLazyList
(++) :: Strict [] a -> Strict [] a -> Strict [] a
xs ++ ys = StrictList $ toLazyList xs List.++ toLazyList ys
(\\) :: Eq a => Strict [] a -> Strict [] a -> Strict [] a
xs \\ ys = StrictList $ toLazyList xs List.\\ toLazyList ys