gpt4 book ai didi

haskell - 在 haskell 中给 `_` 一个类型签名

转载 作者:行者123 更新时间:2023-12-05 09:33:00 25 4
gpt4 key购买 nike

我想将 _coerce 相关联,但我无法为其提供类型签名。

有什么技巧可以解决这个问题吗?

import Data.Coerce

ok :: ()
ok =
let a = _ "hi"
in let a :: String = __ "Hi"
in ()
where
_ = undefined
__ :: Coercible a b => a -> b
__ = coerce

ko =
let a = _ "hi"
in let a :: String = __ "Hi"
in ()
where
__ = undefined
_ :: Coercible a b => a -> b. -- Invalid type signature: _ :: ... Should be of form <variable> :: <type>parser
_ = coerce

最佳答案

_ 是一个保留名称,不能重新定义。它可以在模式中用作通配符,例如

let (_,x) = ....           -- takes the second component
(_,_,_,x,_) = .... -- takes the fourth component
_ = .... -- does not bind any variable
in ....

与其他变量名不同,它可以在一个模式中出现多次。

它也可以用作:例如,

let a = _ "hi"

触发特殊错误

• Found hole: _ :: [Char] -> t
Where: ‘t’ is a rigid type variable bound by
the inferred type of a :: t

本质上,_ "hi" 要求编译器提供术语 t 应该在 hole _< 时对整个表达式进行类型检查的类型 替换为 t

因此,您的ok esample 并不是真的OK,而是触发了上述特殊错误。

关于haskell - 在 haskell 中给 `_` 一个类型签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67572802/

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