>>> init [1, 2, 3] [1,2]
>>> init [1] []
>>> init [] *** Exception: Prelude.init: empty list
>>> head (reverse [undefined, 1]) 1
>>> reverse (1 : 2 : undefined) *** Exception: Prelude.undefined
>>> reverse [] []
>>> reverse [42] [42]
>>> reverse [2,5,7] [7,5,2]
>>> reverse [1..] * Hangs forever *
>>> cycle [] *** Exception: Prelude.cycle: empty list
>>> take 10 (cycle [42]) [42,42,42,42,42,42,42,42,42,42]
>>> take 10 (cycle [2, 5, 7]) [2,5,7,2,5,7,2,5,7,2]
>>> take 1 (cycle (42 : undefined)) [42]
tailErr [] = error "Prelude.tail: empty list" tailErr [1,2,3] = [2,3]
>>> cycle [] *** Exception: Prelude.cycle: empty list >>> cycle [42] [42,42,42,42,42,42,42,42,42,42... >>> cycle [2, 5, 7] [2,5,7,2,5,7,2,5,7,2,5,7...
>>> tail [1, 2, 3] [2,3] >>> tail [1] [] >>> tail [] *** Exception: Prelude.tail: empty listWARNING: This function is partial. You can use case-matching or uncons instead.
>>> reverse [] [] >>> reverse [42] [42] >>> reverse [2,5,7] [7,5,2] >>> reverse [1..] * Hangs forever *
drop1 "" == "" drop1 "test" == "est" \xs -> drop 1 xs == drop1 xs
dropEnd1 "" == "" dropEnd1 "test" == "tes" \xs -> dropEnd 1 xs == dropEnd1 xs
>>> tail [1, 2, 3] [2,3]
>>> tail [1] []
>>> tail [] *** Exception: Prelude.tail: empty list
>>> cycle [] [] >>> take 10 $ cycle [1,2,3] [1,2,3,1,2,3,1,2,3,1]
>>> tail [1, 2, 3] [2,3]
>>> tail [1] []
>>> tail [] *** Exception: Prelude.tail: empty list