Sha256: 23ed7d6a03ebfe6fc8dde9ba16a9c0f602e16ce1f44bdeeba2e6371c931cd685

Contents?: true

Size: 908 Bytes

Versions: 396

Compression:

Stored size: 908 Bytes

Contents

module ListOps
  ( length
  , reverse
  , map
  , filter
  , foldr
  , foldl'
  , (++)
  , concat
  ) where

import Prelude hiding
  ( length, reverse, map, filter, foldr, (++), concat )

foldl' :: (b -> a -> b) -> b -> [a] -> b
foldl' f = go
  where
    go acc [] = acc
    go acc (x:xs) = let acc' = f acc x in acc' `seq` go acc' xs

{-# ANN foldr "HLint: ignore Use foldr" #-}
foldr :: (a -> b -> b) -> b -> [a] -> b
foldr f x0 = go
  where
    go [] = x0
    go (x : xs) = x `f` go xs

length :: [a] -> Int
length = foldl' (\acc _ -> 1 + acc) 0

reverse :: [a] -> [a]
reverse = foldl' (flip (:)) []

map :: (a -> b) -> [a] -> [b]
map f = foldr (\x acc -> f x : acc) []

filter :: (a -> Bool) -> [a] -> [a]
filter f = foldr go []
  where go x acc | f x       = x : acc
                 | otherwise = acc

(++) :: [a] -> [a] -> [a]
xs ++ ys = foldr (:) ys xs

concat :: [[a]] -> [a]
concat = foldr (++) []

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.179 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.178 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.177 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.176 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.175 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.174 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.173 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.172 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.171 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.170 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.169 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.167 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.166 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.165 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.164 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.163 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.162 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.161 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs
trackler-2.2.1.160 tracks/haskell/exercises/list-ops/examples/success-standard/src/ListOps.hs