haskell - Functor 实例 for (newtype Mu f = InF {outF::f (Mu f)})

标签 haskell functor

这让我难住了。你如何为 newtype Mu f = InF {outF :: f (Mu f)} 编写一个 Functor 实例

最佳答案

你不能。为了为某些 Functor c 定义一个实例 cc 必须是 * -> * 类型。所以在你的情况下, 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/

相关文章:

haskell - 如何在 Haskell 中派生多个 Functor 实例?

scala - scala.util.Random.shuffle 的类型是什么?

haskell - Haskell 中的 Control.Parallel 编译问题

c - 如何可靠地比较 Haskell 和 C 的运行时间?

exception - Haskell 中的异常是如何工作的?

haskell - 仿函数链是如何完成的

haskell - 为所有仿函数推广 "sequence"?

syntax-error - 仿函数中的 OCaml 语法错误

math - Haskell 中的守卫方程

haskell - 使用 NoImplicitPrelude 重新绑定(bind)数字文字的语法