1module ReversedList where 2 3{-| 4ReversedList can be used to avoid accidentally forgetting to reverse a list 5(this most commonly occurs when implementing recursive algorithms that build up a 6list that needs to be reversed in the termination case). 7-} 8 9newtype Reversed a = Reversed [a] 10 11 12empty :: Reversed a 13empty = 14 Reversed [] 15 16 17push :: a -> Reversed a -> Reversed a 18push a (Reversed list) = 19 Reversed (a : list) 20 21 22isEmpty :: Reversed a -> Bool 23isEmpty (Reversed []) = True 24isEmpty _ = False 25 26 27toList :: Reversed a -> [a] 28toList (Reversed list) = 29 reverse list 30