s >" 它开始打印字符串但从未结束,这是怎么回事? 最佳答案 @"Hello"在这里无关紧要,它所做的只是将类型修复为 St-6ren">
gpt4 book ai didi

Haskell 稀有模式匹配

转载 作者:行者123 更新时间:2023-12-03 15:05:16 25 4
gpt4 key购买 nike

在haskell,我可以这样做:

s@"Hello" = s 

结果是:
>s
>"

它开始打印字符串但从未结束,这是怎么回事?

最佳答案

@"Hello"在这里无关紧要,它所做的只是将类型修复为 String .你得到相同的行为

s :: String
s = s

这在语义上等同于
s' :: String
s' = undefined

这给出了结果
Prelude> s'
"*** Exception: Prelude.undefined

我所说的“语义等价”是指 ss'是底部值的示例,即来自“由于非严格性,任何类型包含的错误值的 sin bin”中的值。一旦你达到最低值,纯 Haskell 语言基本上是无能为力的,并且已经屈服于,嗯,未定义的“不纯行为”,比如让你永远等待或抛出异常。

然而,再次感谢非严格性,这不一定会发生。打印一个值时,首先发生的是 Show实例被调用并被要求产生一个字符串。 Haskell 字符串是一个惰性列表。和 show任何以 " 开头的字符串,因此即使字符串本身完全未定义, show将设法产生那个角色。

我们可以观察到这更 protected
Prelude> head $ show s
'"'

关于Haskell 稀有模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43945610/

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