Podczas pracy z kątami w stopniach chcę zdefiniować symbol stopnia (°
), który będzie używany jako operator przyrostkowy. Obecnie używam tej linii (w GHCi):Jak zdefiniować operator postfiksu w Haskell?
let o = pi/180
i używać go tak:
tan(11*o)
ale chcę tylko przejść:
tan 11°
które jest znacznie jaśniejsze. Operator stopnia powinien mieć wyższy priorytet niż "tan
" i inne funkcje.
Najbliżej mam to:
let (°) x _ = x*pi/180
używane tak:
tan(11°0)
ale domyślne pierwszeństwo oznaczają nawiasy są nadal potrzebne, wraz z podaniem numeru manekina, to alternatywą jest gorsze niż to, z czego obecnie korzystam.
"Operator stopnia powinien mieć wyższy priorytet niż" tan "i inne funkcje." <- To się nie uda, aplikacja funkcyjna ma najwyższy priorytet według specyfikacji językowej. –
Dlaczego po prostu nie zdefiniujesz nowego typu liczbowego (zawijanie Double lub cokolwiek innego) z nowym typem reprezentującym stopnie? Oczywiście będziesz musiał zwrócić uwagę na "modułową" naturę stopni, jeśli chcesz zdefiniować równość, itd. –
Haskell nie jest językiem, w którym można zrobić wszystko, co kompiluje się w sposób, w jaki przyzwyczaiłeś się do pisania to. W przeciwieństwie do Perla czy nawet Pythona, składnia inflinów Haskella jest w rzeczywistości bardzo uproszczona i prosta, tak po prostu jest tak dobrze zaprojektowana, że nawet ta prosta podstawa pozwala na zadziwiającą ilość bardzo wydajnych skrótów, pomijając wiele paren i ogólnie aby było całkiem czytelne. Ale druga kwestia jest po części dlatego, że istnieją raczej sztywne reguły analizy. – leftaroundabout