current implementation for `defaultSucc` and `defaultPred` is taking toEnum and fromEnum as arguments: ``` purescript defaultSucc :: forall a. (Int -> Maybe a) -> (a -> Int) -> a -> Maybe a defaultSucc toEnum' fromEnum' a = toEnum' (fromEnum' a + 1) defaultPred :: forall a. (Int -> Maybe a) -> (a -> Int) -> a -> Maybe a defaultPred toEnum' fromEnum' a = toEnum' (fromEnum' a - 1) ``` When it could also be implemented like this: ``` purescript defaultSucc :: ∀ a. BoundedEnum a => a -> Maybe a defaultSucc = toEnum <<< (_ + 1) <<< fromEnum defaultPred :: ∀ a. BoundedEnum a => a -> Maybe a defaultPred = toEnum <<< (_ - 1) <<< fromEnum ``` so why is it like that?