这些天我正在研究Haskell,并且使用像OOP方法这样的函数。
首先,按如下方式定义运算符:
(//) :: a -> (a -> b) -> b
x // f = f x
如您所见,此运算符会反转函数f
和参数x
的顺序,然后应用它。例如,equals
可以定义为:
equals :: Eq a => a -> a -> Bool
equals = \x -> \y -> x == y
comparison = (1 + 2) // equals 3 -- True
现在这是我的问题。 使用像OOP方法这样的Haskell函数是好方法吗?这意味着函数的反转和(第一)参数的好坏。
更新
以下是反引号(`
)不可用的情况。
data Person = Person { name :: String }
myself = Person "leafriend"
然后
> name myself
"leafriend"
> myself // name
"lefirend"
> myself `name`
ERROR - Syntax error in expression (unexpected end of input)
答案 0 :(得分:2)
你所写的只是风格问题。 (但是,C / Java程序员使用//
作为运算符似乎相当残忍。)我会因为某些原因而不鼓励使用它,主要是因为:
如果你想让Haskell看起来更像你最喜欢的OOP语言,那你就错了。 Haskell看起来像数学:类似于lisp-y,带有前缀函数应用程序,还有中缀函数和运算符。