Quando si lavora con gli angoli in gradi, voglio definire il simbolo dei gradi (°
) da utilizzare come operatore postfisso. Attualmente, io uso questa linea (in GHCi):Come definire un operatore postfisso in Haskell?
let o = pi/180
e usarlo in questo modo:
tan(11*o)
ma voglio solo andare:
tan 11°
che è molto più chiara. L'operatore di laurea dovrebbe avere una precedenza più alta di "tan
" e altre funzioni.
Il più vicino che ho è:
let (°) x _ = x*pi/180
usato in questo modo:
tan(11°0)
ma la precedenza di default significa che le parentesi sono ancora necessari, e con il numero fittizio, questa alternativa è peggio di quello che attualmente uso.
"L'operatore di laurea dovrebbe avere precedenza più alta di" tan "e altre funzioni." <- Non funzionerà, l'applicazione della funzione ha la precedenza più alta secondo le specifiche del linguaggio. –
Perché non si definisce semplicemente un nuovo tipo numerico (avvolgimento di Double o qualsiasi altra cosa) con un newtype che rappresenta i gradi? Ovviamente dovrai prestare attenzione alla natura "modulare" dei gradi se vuoi definire l'uguaglianza, ecc. –
Haskell non è il tipo di linguaggio in cui puoi fare solo qualsiasi cosa compili il modo in cui sei abituato a scrivere esso. A differenza di Perl o anche di Python, la sintassi infisso di Haskell è in realtà molto semplice e semplice, è così ben progettata che anche questa semplice base consente un sacco sorprendente di abbreviazioni molto efficienti, di lasciare fuori molti parens, e in generale per rendere le cose abbastanza leggibili Ma quest'ultimo punto è in parte perché ci sono queste regole di parsing piuttosto rigide. – leftaroundabout