Not a Functor
Not a Functor
Imagine that we’ve created a new type to represent a sorted list of values:
{-# LANGUAGE DerivingStrategies #-}
module SortedListFunctor (SortedList, insertSorted) where
data SortedList a = Empty | Cons a (SortedList a)
deriving stock (Eq, Show)
insertSorted :: Ord a => a -> SortedList a -> SortedList a
Empty = Cons a Empty
insertSorted a Cons b bs)
insertSorted a (| a >= b = Cons b (insertSorted a bs)
| otherwise = Cons a (Cons b bs)
Although SortedList
might be useful, it turns out that you can’t write a
correct instance of Functor
for a SortedList
. Try to define Functor
yourself and experiment with it’s behavior. See if you can figure out why you
can’t write a correct instance.
Hint 1
Some high level hint text
Hint 2
Some more detailed hint text
Hint 3
Even more detailed hint text
Solution
A complete solution for the exercise