I’m having a problem getting the following to compile:
module ContrivedExample where
import Prelude
import Data.Either (Either(..))
import Control.Monad.Eff (Eff)
import Control.Monad.Eff.Exception (EXCEPTION, throw)
import Control.Monad.Eff.Console (CONSOLE, log)
import Control.Monad.Eff.Class (liftEff)
import Control.Monad.Aff (launchAff)
import Control.Monad.Aff.Console (log) as A
contrivedExample :: forall e. Either String String -> Eff (exception :: EXCEPTION, console :: CONSOLE | e) Unit
contrivedExample a = do
_ <- launchAff do
_ <- A.log "yay"
liftEff $ case a of
Left e -> log e
Right a -> throw a
pure unit
I get this error:
Could not match type
( console :: CONSOLE
| e3
)
with type
( exception :: EXCEPTION
, console :: CONSOLE
| t2
)
If I remove exception from the Effect row, I get an error on the other side of the Either
. Is there a better alternative to liftEff or some way I can unify the types?