Ho la seguente funzione in HaskellCome posso riscrivere una funzione Haskell di due argomenti al punto-stile libero
agreeLen :: (Eq a) => [a] -> [a] -> Int
agreeLen x y = length $ takeWhile (\(a,b) -> a == b) (zip x y)
sto cercando di imparare a scrivere 'idiomatica' Haskell, che sembrano preferire l'utilizzo di .
e di $
anziché di parentesi e anche di preferire il codice pointfree ove possibile. Non riesco proprio a liberarmi di menzionare esplicitamente x
e . Qualche idea?
Penso che avrei lo stesso problema con il pointfreeing qualsiasi funzione di due argomenti.
BTW, questo è solo per cercare di scrivere un buon codice; non alcuni "usano tutto ciò che serve per renderlo pointfree" esercizio di compiti a casa.
Grazie.
(Commento aggiunto) Grazie per le risposte. Mi hai convinto che questa funzione non beneficia del pointfree. E mi hai anche dato dei grandi esempi per praticare le espressioni di trasformazione. E 'ancora difficile per me, e sembrano essere il più essenziale per Haskell come puntatori sono a C.
Ho trovato hlint (http://community.haskell.org/~ndm/darcs/hlint/hlint.htm) molto utile per aiutarmi ad apprendere altri modi per scrivere espressioni, incluso l'uso. e $. – mhwombat