Essendo un novizio di Haskell non riesco a capire il motivo per cui l'espressione head . words “one two three four”
lancia una composizione un'eccezione e la funzione head . words
deve essere applicato con $
operatore - l'espressione a destra di esso non lo fa bisogno di ulteriore valutazione perché è solo un singolo String
. L'altro modo per compilarlo è mettere head . words
tra parentesi ma lo (head . words) :: String -> String
ha lo stesso tipo di head . words :: String -> String
quindi perché metterlo tra parentesi rende l'espressione compilare?Applicazione di argomenti di funzionare composizione in Haskell
6
A
risposta
11
A causa delle regole di precedenza. L'applicazione ha la precedenza più alta; $
- il più basso.
head . words “one two three four”
viene analizzato come head . (words “one two three four”)
cioè words
applicato su una stringa deve produrre una funzione (come richiesto dalla (.)
). Ma non è il tipo che ha words
:
Prelude> :t words
words :: String -> [String]
head . words $ “one two three four”
d'altra parte, è analizzato come (head . words) “one two three four”
ei tipi di attacco.
Problemi correlati
- 1. generica composizione funzione in Haskell
- 2. funzione Haskell composizione domanda
- 3. Applicazione funzione in Haskell
- 4. Composizione funzionale con funzioni multivalore in haskell?
- 5. Funzione Composizione Funzione VS Applicazione
- 6. Haskell: inferenza di tipo e la funzione di composizione
- 7. Applicazione per operatore dollaro Haskell
- 8. pieghevole. composizione della funzione foldr - Haskell
- 9. pigrizia e composizione delle funzioni (haskell, erlang)
- 10. "Errore: troppo pochi argomenti di funzionare"
- 11. Haskell Riscrivi regole e composizione delle funzioni
- 12. Composizione di musica in LaTeX
- 13. Haskell: Parsing argomenti della riga di comando
- 14. È una buona idea avere uno zucchero di sintassi per funzionare la composizione in Python?
- 15. Famiglia di tipi Haskell e argomenti fittizi
- 16. `argomenti flip` di linea applicazione infisso
- 17. applicazione Haskell funzione e strigliare
- 18. Composizione di funzioni in Java?
- 19. Mappa applicata a più argomenti in Haskell
- 20. Argomenti haskell printf come array
- 21. Haskell funzione infisso precedenza applicazione
- 22. richiedere una password in Haskell applicazione a riga di comando
- 23. Composizione di interfacce [Golang]
- 24. Funzione di composizione variabile?
- 25. Più argomenti per funzionare chiamati da pthread_create()?
- 26. C# Applicazione console - Continua a funzionare
- 27. Esiste un operatore di composizione delle funzioni infisso in OCaml?
- 28. Haskell ha una libreria di composizione di query SQL come ActiveRecord o Sequel?
- 29. Quanti argomenti prende la funzione foldr di Haskell?
- 30. Composizione di un elenco di tutte le coppie
Grazie per la risposta, è stato un po 'difficile per me capire che l'operatore di composizione è esso stesso una funzione. –
@wojtek ah, sì, '(.) :: (b -> c) -> (a -> b) -> a -> c'. Non dimenticare, le frecce nel tipo di firme associano a destra. È veramente '(.) :: (b -> c) -> (a -> b) -> (a -> c)'. Immagina di avere questi due tubi, 'g :: b-> c' e' h :: a-> b'. Quindi, ovviamente, l'output di 'b' va all'input di' b': '(g.h) x = g (h x)' i.e. '(g.h) :: a-> c'. –
@wojtek Ogni operatore è esso stesso una funzione e ha precedenza più bassa dell'applicazione della funzione. Questo è qualcosa che un programmatore Haskell deve assolutamente tenere a mente. – Ingo