我喜欢在REPL中玩,因为它是一种尝试新事物的快速而简单的方法.如您所知,该语言的某些方面在REPL中与在模块内完成不同,多行定义就是其中之一.
现在,我想知道是否,在这种情况下,我可以在REPL中声明操作符固定性.天真的尝试......惊喜......不起作用.
Prelude> let (f · g) x = f(g(x))
Prelude> infixl 7 ·
Run Code Online (Sandbox Code Playgroud)
Chr*_*lor 11
您可以使用这样的多行定义来声明固定性
>>> :{
>>> let infixl 7 ***
>>> (f *** g) (a,b) = (f a, g b)
>>> :}
>>> (negate *** show) (1,2)
(-1,"2")
Run Code Online (Sandbox Code Playgroud)
编辑:虽然,有趣的是,当您向GHCI询问该功能时,不会显示固定性
>>> :i ***
(***) :: (a -> a') -> (b -> b') -> (a, b) -> (a', b')
-- Defined at <interactive>:10:8
Run Code Online (Sandbox Code Playgroud)
相比
>>> :i &&
(&&) :: Bool -> Bool -> Bool -- Defined in `GHC.Classes'
infixr 3 &&
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
729 次 |
| 最近记录: |