gpt4 book ai didi

haskell - 如何在阅读时忽略多态可读类型?

转载 作者:行者123 更新时间:2023-12-02 03:42:03 27 4
gpt4 key购买 nike

我有类似的问题:

data Foo a = Foo { myInt :: Integer, myValue :: a } deriving Read

bar :: String -> Integer
bar = myInt . read

main = print $ bar stringWithFooOfa

我不想使用像 read 这样的东西。 (!!1) 。单词,如果我不需要的话。

最佳答案

read 添加类型注解。正如评论者所建议的那样,Haskell 无法知道您要阅读的内容,因为您会立即将其转换为 Int。为了更清楚,考虑这个例子:

data Foo a  = Foo { myInt  :: Integer, myValue  :: a } deriving Read
data Foo2 a = Foo { myInt2 :: Integer } deriving Read

bar :: String -> Integer
bar = myInt . read

现在 bar 可能有两种截然不同的行为,很难知道哪个是正确的。

要告诉 Haskell 你想要哪一个,请在 read 周围使用内联注释:

bar :: String -> Integer
bar = myInt . (read :: String -> Foo ())

请注意,我也选择了 a。否则,我们将与上面的情况相同,只是使用 a 而不是 Foo

关于haskell - 如何在阅读时忽略多态可读类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19478359/

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