2011-08-25 7 views
11

Powiedzmy mam ten kod

let identifier = spaces_surrounded (many1Satisfy isLetter) 

Zastanawiałem się, czy to był jakiś rodzimy F # funkcja, która pozwoliła mi byłaby go

let identifier = spaces_surrounded $ many1Satisfy isLetter 

to znaczy, coś takiego jak

let ($) f1 f2 = f1 (f2) 

(to znaczy, jeśli się nie mylę, moje umiejętności Haskella nie są zbyt ostre).

Odpowiedz

16

Standard # F idiom za to do przodu rura operator |> były byś przepisać

let identifier = spaces_surrounded (many1Satisfy isLetter) 

jak

let identifier = many1Satisfy isLetter |> spaces_surrounded 

można również użyć do tyłu operatora rury <| jeśli chcą utrzymać oryginalna kolejność, ale zazwyczaj jest to mniej popularne

let identifier = spaces_surrounded <| many1Satisfy isLetter 
+0

Hmm, więc wygląda na <| jest to, czego szukałem. Jaka jest jego definicja? –

+5

To jest "let inline (<|) fx = fx" jak widać tutaj: https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/prim-types.fs – Brian

+2

Pamiętaj, że definiowanie własnych operatorów a la Haskell podlega regułom skojarzeń/precedencji F #, np zobacz http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html#_Toc270597402 – Brian