2011-08-25 11 views
11

Diciamo che ho questo codice

let identifier = spaces_surrounded (many1Satisfy isLetter) 

mi chiedevo se ci fosse qualche F funzione nativa # che mi ha permesso di refactoring per

let identifier = spaces_surrounded $ many1Satisfy isLetter 

che è, qualcosa come

let ($) f1 f2 = f1 (f2) 

(cioè se non sbaglio, le mie abilità Haskell non sono troppo nitide ..).

risposta

16

L'F # linguaggio standard per questo è l'operatore di pipe in avanti |> fosse si sarebbe riscrivere

let identifier = spaces_surrounded (many1Satisfy isLetter) 

come

let identifier = many1Satisfy isLetter |> spaces_surrounded 

è anche possibile utilizzare l'operatore di pipe all'indietro <| se si vuole mantenere la ordine originale, ma questo tende ad essere un po 'meno comune

let identifier = spaces_surrounded <| many1Satisfy isLetter 
+0

Hmm così sembra <| è quello che stavo cercando. Qual è la sua definizione? –

+5

È 'lascia inline (<|) fx = fx' come visto qui: https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/prim-types.fs – Brian

+2

Si noti che definire i propri operatori a la Haskell è soggetto alle regole F # di associatività/precedenza, ad es vedere http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html#_Toc270597402 – Brian

Problemi correlati