我试图定义一组受限制的多态值,例如:
myList = ["foo", 5] :: [Show a => a]
执行以下代码时会出现错误(GHCi, version 8.6.5)
GHC目前不支持陈述多态
无论如何,有没有可能指定一种类型,使得像f :: Show a => [a] -> [String]
这样的函数可以消耗上述限制值?
换句话说,有没有一种方法可以通过编译器验证以下代码?
(++ "fork") . show <$> ["foo", 5]
我目前正在尝试通过定义一个值和期望结果的数据集[(value, "expectedResult")]
来测试GADT类型类实例中的Show
。但是,由于GADT构造函数指定了值的类型,因此不能简单地这样做。
String->String
的show
与Int->String
的show
不同。那么在<$>
左侧的show
的类型将是什么? - Willem Van Onsemforall a. Show a => [a] -> [String]
,我希望通过使用 RankNTypes,可能有可能实现它。 - Nicolas Heimann[Wrapper]
,这是一个复杂的类型,与简单的[String]
是同构的。这是一个已知的反模式。 - chi