Isto é o que tenho até agora:
instance Monad Ptr where
return = pure
(>>=) (Ptr t) f = f t
O erro que está sendo gerado é:
• Couldn't match a lifted type with an unlifted type
When matching types
a :: *
GHC.Prim.Addr# :: TYPE 'GHC.Types.AddrRep
• In the first argument of ‘f’, namely ‘t’
In the expression: f t
In an equation for ‘>>=’: (>>=) (Ptr t) f = f t
• Relevant bindings include
f :: a -> Ptr b (bound at RegionalMemory.hs:16:19)
(>>=) :: Ptr a -> (a -> Ptr b) -> Ptr b
(bound at RegionalMemory.hs:16:5)
|
16 | (>>=) (Ptr t) f = f t
| ^
Não entendi bem esse erro. O que estou fazendo errado aqui?
t
não é do tipoa
, mas sim umAddr#
ess, então você não. De fato, oPtr
tipo de dado é definido como [Haskell-src] :O
a
não informa qual é o tipo do valor encapsulado no construtor de dados, mas informa a que tipo de coisa o endereço se refere.Então não podemos fazer isso funcionar, não obtemos o "resultado" do endereço para passar como parâmetro.