
Hello Ahmad, Il 13 novembre 2022 alle 16:33 Ahmad Ismail ha scritto:
Due to lack of examples, I am not understanding how to implement >>= and
.
All you need to implement is (>>=)!
The code I came up with so far is:
instance Monad (WhoCares a) where (>>=) :: Matter a -> (a -> Matter b) -> Matter b (>>) :: Matter a -> Matter b -> Matter b return :: a -> Matter a return = pure
The signature for (>>=) is wrong, `Matter` is a *data* constructor, you need a *type* one instead, so: (>>=) :: WhoCares a -> (a -> WhoCares b) -> WhoCares b But let us go back to typeclasses. Your `Applicative` instance
instance Applicative WhoCares where pure = Matter Matter f <*> Matter a = Matter (f a)
is broken: λ> ItDoesnt <*> WhatThisIsCalled *** Exception: /tmp/prova.hs:11:5-40: Non-exhaustive patterns in function <*> So we need first to fix that. What behaviour would you expect, what are you trying to model with `WhoCares`? —F