String unwrapIO (-6ren">
gpt4 book ai didi

haskell - Haskell编译器 "know"那个IO不能解包怎么办?

转载 作者:行者123 更新时间:2023-12-04 05:01:51 29 4
gpt4 key购买 nike

显然,下面的函数是不可能的,因为不可能永久地解开一个 IO 值(忽略 unsafePerformIO 或类似的):

unwrapIO :: IO String -> String
unwrapIO (IO str) = str

但是,类似的功能如下:
unwrapJust :: Maybe String -> String
unwrapJust (Just str) = str
unwrapJust Nothing = "ignore this plz"

我完全理解为什么 #2 可能但 #1 不可能的原因,但我不明白如何。我也可以自己制作不可拆包的类型吗?

最佳答案

JustNothingMaybe a 类型的数据构造函数. IO没有数据构造函数可言(在 GHC 中它实际上有构造函数,但它们实际上是 GHC 的实现细节,其他实现可能会以不同的方式定义 IO)。
unwrapIO (IO str) = str以同样的方式没有意义unwrapMaybe (Maybe str) = str没有意义。 IOMaybe不是数据构造函数,所以你不能对它们进行模式匹配。

关于haskell - Haskell编译器 "know"那个IO不能解包怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53491039/

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