gaw*_*awi 8 monads haskell ghci applicative
在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
Run Code Online (Sandbox Code Playgroud)
这是否意味着ghci执行Applicative并显示结果,就像IO
?
请注意,pure ()
并且pure (+1)
不打印任何内容.
Dan*_*her 11
如果使用return
而不是,则会得到相同的行为pure
.要找出要做的事情,ghci必须为给定的表达式选择一种类型.ghci的默认规则是没有其他约束的,它选择IO
一个Applicative
或一个Monad
实例.因此它将其解释pure 1
为类型的表达IO Integer
.IO a
如果1. a
具有Show
实例而2 a
则不是,则执行在提示符处输入的类型的表达式并打印其结果()
.因此输入pure 1
提示结果
v <- return (1 :: Integer)
print v
return v
Run Code Online (Sandbox Code Playgroud)
正在执行(以及it
绑定到返回的魔术变量v
).因为pure ()
,特殊情况适用,因为()
被认为是无趣的,因此只return ()
执行并it
绑定()
,因为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
Run Code Online (Sandbox Code Playgroud)
Show
对于范围内的函数的实例,它被打印(不是它的信息),然后可以使用该函数(当然,后者独立Show
于范围内的实例).
归档时间: |
|
查看次数: |
453 次 |
最近记录: |