gpt4 book ai didi

haskell - Applicative 的 ghci 特例?

转载 作者:行者123 更新时间:2023-12-04 06:45:58 26 4
gpt4 key购买 nike

在 ghci 中:

λ> :t (pure 1)
(pure 1) :: (Applicative f, Num a) => f a
λ> show (pure 1)

<interactive>:1:1:
No instance for (Show (f0 a0))
arising from a use of `show'
Possible fix: add an instance declaration for (Show (f0 a0))
In the expression: show (pure 1)
In an equation for `it': it = show (pure 1)
λ> pure 1
1

这是否意味着 ghci 执行 Applicative 并显示结果,就像 IO ?

请注意 pure ()pure (+1)不要打印任何东西。

最佳答案

如果你使用 return,你会得到相同的行为。而不是 pure .要找出要做什么,ghci 必须为给定的表达式选择一个类型。 ghci 的默认规则是在没有其他约束的情况下,它选择 IO对于 ApplicativeMonad实例。因此它解释 pure 1作为 IO Integer 类型的表达式. IO a 类型的表达式如果为 1,则执行在提示符处输入并打印其结果。a有一个 Show实例和 2。a不是 () .从而输入pure 1在提示的结果

v <- return (1 :: Integer)
print v
return v

正在执行(并且魔术变量 it 绑定(bind)到返回的 v )。对于 pure () , 特殊情况适用于 ()被认为是无趣的,因此只有 return ()被执行并且 it绑定(bind)到 () , 对于 pure (+1) ,返回一个函数,没有 Show范围内的函数的实例,因此不会打印任何内容。然而,
Prelude Control.Applicative> :m +Text.Show.Functions
Prelude Control.Applicative Text.Show.Functions> pure (+1)
<function>
it :: Integer -> Integer
Prelude Control.Applicative Text.Show.Functions> it 3
4
it :: Integer

Show范围内的函数的实例,它被打印出来(不是提供信息),然后可以使用该函数(后者独立于 Show 实例在范围内,当然)。

关于haskell - Applicative 的 ghci 特例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7949464/

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