2015-12-07 7 views
7

In Haskell, è possibile utilizzare l'operatore $ per ripulire i bit di codice, eliminando la necessità di parenti.

Elm supporta questo operatore o qualcosa del genere?

Posso definirlo anch'io ma speravo che fosse qualcosa di incorporato.

Ecco come funziona:

import Html 
import List exposing (map, foldr) 

datas = [("a", 1), ("b", 2), ("c", 3)] 

{--} 
($) : (a -> b) -> (a -> b) 
($) a b = a b 
infixr 0 $ 
--} 

main = 
    {-- replace all these parens 
    Html.text (toString (foldr (++) "" (map fst datas))) 
    --} 
    Html.text $ toString $ foldr (++) "" $ map fst datas 

risposta

12

Sì, usiamo <| invece di $. Lo abbiamo preso in prestito da F # insieme alla versione capovolta |> e << per la composizione . e la versione capovolta >>.
Una volta introdotti, le persone gravitano naturalmente verso uno stile chiamato "pipelining", dove si prendono alcuni dati e si trasformano in un paio di passaggi usando l'operatore |>. In questi giorni questo è uno schema di codice più comune nel codice Elm rispetto all'utilizzo di <|.

Ad esempio:

update : (Float, Keys) -> Model -> Model 
update (dt, keys) mario = 
    mario 
    |> gravity dt 
    |> jump keys 
    |> walk keys 
    |> physics dt 

(Tratto da Mario example on the website)

+1

Nizza. L'avevo visto nei documenti ma non avevo stabilito la connessione su come si poteva ripulire tutto nello stesso modo. Sicuramente voglio usare '|>' e leggere il mio codice in avanti di '$' e leggere il mio codice all'indietro –

+0

anche, questo è chiamato l'operatore "thrush" in clojure, ma è implementato un operatore infisso su funzioni al curry invece che come una macro. –

Problemi correlati