是否可以在REPL中定义固定性声明?

时间:2013-07-19 09:03:45

标签: haskell

我喜欢在REPL中玩游戏,因为它是一种尝试新事物的快速而简单的方法。如你所知,该语言的某些方面在REPL中与在模块内完成不同,多行定义就是其中之一。

现在,我想知道,在这种情况下,我是否可以在REPL中声明操作员固定性。天真的尝试......惊讶......不起作用。

Prelude> let (f · g) x = f(g(x))
Prelude> infixl 7 ·

1 个答案:

答案 0 :(得分:11)

您可以使用像这样的多行定义来声明固定性

>>> :{
>>> let infixl 7 ***
>>>     (f *** g) (a,b) = (f a, g b)
>>> :}
>>> (negate *** show) (1,2)
(-1,"2")

编辑:虽然有趣的是,当你向GHCI询问这个功能时,不会显示固定性

>>> :i ***
(***) :: (a -> a') -> (b -> b') -> (a, b) -> (a', b')
        -- Defined at <interactive>:10:8

相比
>>> :i &&
(&&) :: Bool -> Bool -> Bool     -- Defined in `GHC.Classes'
infixr 3 &&