Не функция и композиция функций в F#

Возможно ли, чтобы в F# была композиция функций между Operators.Not и какой-либо стандартной функцией .NET, например String.IsNullOrEmpty?

Другими словами, почему следующее лямбда-выражение неприемлемо:

(fun x -> not >> String.IsNullOrEmpty)

person ax1mx2    schedule 09.04.2015    source источник


Ответы (2)


Композиция функции >> работает наоборот — она передает результат функции слева функции справа — поэтому ваш фрагмент передает bool в IsNullOrEmpty, что является ошибкой типа. Следующие работы:

(fun x -> String.IsNullOrEmpty >> not)

Или вы можете использовать обратную композицию функций (но я думаю, что >> обычно предпочтительнее в F #):

(fun x -> not << String.IsNullOrEmpty)

Кроме того, этот фрагмент создает функцию типа 'a -> string -> bool, поскольку игнорирует аргумент x. Итак, я полагаю, вы можете просто захотеть:

(String.IsNullOrEmpty >> not)
person Tomas Petricek    schedule 09.04.2015

Если вы хотите использовать аргумент x, вы можете использовать оператор канала |> вместо операторов композиции функций (<< или >>).

fun x -> x |> String.IsNullOrEmpty |> not

Но обычно предпочтительнее бесточечный стиль с функциональной композицией.

person Kwang Yul Seo    schedule 11.04.2015