I have defined the following interface:
interface Failable c where
Failure : Type
initWithFailure : Failure -> c
Then I proceeded to create an implementation:
Failable (Maybe a) where
Failure = ({T:Type} -> T)
initWithFailure _ = Nothing
This was accepted by the compiler, but when I tried to use it in the following manner...
main :: IO ()
main = do
let smth : ({K:Type} -> Maybe K) = initWithFailure ()
...the compiler said that there is a type mismatch between () and Failure.
This not suppose to happen, right?