gpt4 book ai didi

haskell - 不能为这种类型派生 Generic 吗?

转载 作者:行者123 更新时间:2023-12-03 20:29:17 26 4
gpt4 key购买 nike

在 GHC 8.6.2 上编译这个简短的片段:

{-# LANGUAGE DeriveGeneric, PolyKinds #-}
import GHC.Generics

data Foo f
= FA
| FB (f (Foo f))
deriving (Generic, Generic1)

导致此错误:
Can't make a derived instance of ‘Generic1 Foo’:
Constructor ‘FB’ applies a type to an argument involving the last parameter
but the applied type is not of kind * -> *

是不是可以推导出 Generic对于这种类型?为什么?

最佳答案

Generic1 Foo无法导出,因为 Generic1 适用于种类 * -> * ,不是 (* -> *) -> * .原则上可以支持 (* -> *) -> *更多的构造函数在 GHC.Generics ,但是这种方法不能很好地扩展(它带有更多不直观的语法限制,对于更复杂的类型,您将始终遇到相同的问题)。

你实际上可以用普通的 Generic 做很多事情与 Generic1 的最初预期用例重叠.否则,您将需要比 GHC.Generics 更强大的东西。也许,比如最近发布的 kind-generics (包括指向论文和黑客的链接)。

关于haskell - 不能为这种类型派生 Generic 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53498707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com