在Haskell中使用类似OOP方法的函数

时间:2012-01-15 08:04:11

标签: oop function haskell methods

这些天我正在研究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)

1 个答案:

答案 0 :(得分:2)

你所写的只是风格问题。 (但是,C / Java程序员使用//作为运算符似乎相当残忍。)我会因为某些原因而不鼓励使用它,主要是因为:

  • 这不是惯用的Haskell,会让任何试图读取代码的Haskeller感到困惑
  • 你不应该像想到OOP语言那样考虑Haskell

如果你想让Haskell看起来更像你最喜欢的OOP语言,那你就错了。 Haskell看起来像数学:类似于lisp-y,带有前缀函数应用程序,还有中缀函数和运算符。