次のようなタイプの関数がある場合
f :: (Ord a) => a -> a -> Bool
f a b = a > b
この関数をnotでラップするmake関数が欲しいです。
たとえば、このような関数を作る
g :: (Ord a) => a -> a -> Bool
g a b = not $ f a b
コンビネータを次のように作成できます
n f = (\a -> \b -> not $ f a b)
しかし、方法がわかりません。
*Main> let n f = (\a -> \b -> not $ f a b)
n :: (t -> t1 -> Bool) -> t -> t1 -> Bool
Main> :t n f
n f :: (Ord t) => t -> t -> Bool
*Main> let g = n f
g :: () -> () -> Bool
私は何を間違っていますか?
そして、ボーナスの質問は、より多くのパラメーターと最も少ないパラメーターを使用して関数に対してこれを行う方法です。
t -> Bool
t -> t1 -> Bool
t -> t1 -> t2 -> Bool
t -> t1 -> t2 -> t3 -> Bool