这是我目前所拥有的:
instance Monad Ptr where
return = pure
(>>=) (Ptr t) f = f t
抛出的错误是:
• 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
| ^
我不太明白这个错误。我做错了什么?
t
不是类型a
,而是Addr#
ess,所以你不知道。实际上,Ptr
数据类型定义为 [Haskell-src]:它
a
并没有告诉我们数据构造函数中包装的值的类型是什么,而是告诉我们地址引用了什么类型的东西。所以我们无法完成这个工作,我们没有得到作为参数传递的地址的“结果”。