Project Inquiry

Implement Prelude.reverse

Challenge
{-# LANGUAGE NoImplicitPrelude #-}

module Main where

import           Prelude hiding (reverse)

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

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

-- TODO
reverse :: [a] -> [a]
reverse = undefined
Solution
{-# LANGUAGE NoImplicitPrelude #-}

module Main where

import           Prelude hiding (reverse)

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

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

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