最近、Haskellを勉強していて、OOPメソッドのような関数を使ってアイディアを得ました。HaskellのOOPメソッドのような関数を使う
まず、以下のような演算子を定義します。あなたが見ることができるように
(//) :: a -> (a -> b) -> b
x // f = f x
は、このオペレータはx
は、それを適用する関数f
と引数の順序が逆になります。たとえば、equals
は、次のように定義できます。
equals :: Eq a => a -> a -> Bool
equals = \x -> \y -> x == y
comparison = (1 + 2) // equals 3 -- True
ここに私の質問があります。 OOPメソッドのようなハスケル関数を使った良いアプローチですか?これは、関数の逆転を意味し、(最初の)引数は良いかどうかです。ここ
UPDATE
はバッククォートの場合(`
)が利用可能でないからです。
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)
これはOOPではない、単なる文法的な奇妙なものです。もしあなたが "equals"というメソッドに対して '1 + 2'の結果を求め、その結果と' 3'を引数として呼び出すのであれば、OOPになります。 – delnan
'//'を定義する必要はありません。ハスケルでは 'f a b'は' 'f'' b''と書くことができるので、' 'comparison =(1 + 2)' 'は' '3''と書くことができます。 – kennytm
delnan //はい、そうです。これはOOPではなく、構文が異なるだけです。私の質問はただの好奇心からです。 – leafriend