这让我难住了。你如何为 newtype Mu f = InF {outF :: f (Mu f)}
编写一个 Functor 实例
最佳答案
你不能。为了为某些 Functor c
定义一个实例 c
, c
必须是 * -> *
类型。所以在你的情况下, Mu
应该是那种,这意味着它的参数 f
必须是那种 *
。但显然情况并非如此,因为您将 f
应用于其他内容(到 Mu f
)。
更简单地说,如果 Mu
是一个仿函数,您可以对任何 fmap
类型的值使用 Mu f
f
。但这将允许您将类型参数更改为任何其他类型,例如,通过将函数 fmap (const (0 :: Int))
应用于任何 Mu f
值,它必须返回一个 Mu Int
值。但是您不能形成这样的值,因为该值的 outF
将具有没有意义的 Int (Mu Int)
类型。
关于haskell - Functor 实例 for (newtype Mu f = InF {outF::f (Mu f)}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39770191/