我已经定义了一个函数:
gen :: a -> b
所以只是试图提供一个简单的实现:
gen 2 = "test"
但是会抛出错误:
gen.hs:51:9:
Couldn't match expected type ‘b’ with actual type ‘[Char]’
‘b’ is a rigid type variable bound by
the type signature for gen :: a -> b at gen.hs:50:8
Relevant bindings include gen :: a -> b (bound at gen.hs:51:1)
In the expression: "test"
In an equation for ‘gen’: gen 2 = "test"
Failed, modules loaded: none.
所以我的函数不正确。为什么a
没有被定义为整数类型,而b
没有被定义为字符串类型?
forall r. (forall a. a -> r) -> r
,其中a
是存在量化变量。 - Aadit M Shahgen
的方法,但大多数都是无用的。例如gen x = gen x
可以工作(但从未成功产生结果),gen x = unsafeCoerce x
也可以工作,它实际上可能会产生有效的结果,但这个函数之所以没有 "unsafe" 在其名称中是有原因的(基本上它就像 C++ 中的reinterpret_cast
或者 C 中的 addressof + cast + dereference)。 - sepp2k