Project Inquiry

Implement Prelude.length

Challenge
{-# LANGUAGE NoImplicitPrelude #-}

module Main where

import           Prelude hiding (length)

main :: IO ()
main = putStrLn $ if test then "SUCCESS" else "FAILURE"

test :: Bool
test = foldl (&&) True [ length [] == 0
                       , length [1] == 1
                       , length [1, 2] == 2
                       , length [1, 2, 3] == 3
                       , length [1, 2, 3, 4] == 4
                       ]

-- TODO
length :: (Integral b) => [a] -> b
length = undefined
Solution
{-# LANGUAGE NoImplicitPrelude #-}

module Main where

import           Prelude hiding (length)

main :: IO ()
main = putStrLn $ if test then "SUCCESS" else "FAILURE"

test :: Bool
test = foldl (&&) True [ length [] == 0
                       , length [1] == 1
                       , length [1, 2] == 2
                       , length [1, 2, 3] == 3
                       , length [1, 2, 3, 4] == 4
                       ]

-- DONE
length :: (Integral b) => [a] -> b
length xs = foldl (\l _ -> l + 1) 0 xs