Expected type: ErrorT String IO Integer
Actual type: IO (Either String Integer)
我不知道,我哪里错了。毕竟,这些类型是同构的 当然,当我从
替换我的功能签名时ErrorT String IO Integer
到
IO (Either String Integer)
编译器很高兴,但我不高兴,因为我很困惑。
答案 0 :(得分:4)
回答有点棘手,因为没有真正的问题,但编译器不满意,因为类型可能是同构但它们不是同义词 - 在{...}中有一个ErrorT
方式:
newtype ErrorT e m a = ErrorT m (Either e a)
^^^^^^
你已经在另一个问题中遇到过这个问题 - 这是
之类的区别return (Left "Hello") :: IO (Either String Integer)
和
ErrorT (return (Left "Hello")) :: ErrorT String IO Integer