Wpis z mikrobloga

konkretyzacja typu

@MirkoStats: @KrzaQ2: Dokładnie. Ogólnie nie trzeba tego pisać, ale jak się gdzieś pomylisz to taka deklaracja pozwala kompilatorowi zweryfikować czy na pewno funkcja przyjmuje i zwraca to co trzeba.
W ogóle haskell to zajebisty język, polecam napisać chociaż jeden projekcik, można przekonać się jak wiele daje silne typowanie i podejście funkcyjne. Brak stanu mocno ułatwia pisanie i debugowanie kodu, potem aż chce się używać takiego podejścia w innych
@KrzaQ2: http://pastebin.com/N20Ni4Vx
Nie wiem czy to zniszczenie kodu, ale użyłem pattern matchingu zamiast guardów i head/tail, dokonałem eta redukcji, gdzie się dało, pozbyłem się krotek z tej funkcji *Impl i ponieważ była dość krótka, to ją ukryłem w where zamiast trzymać na top-level. Wywaliłem zbędne importy (ghc -Wall już niczym nie pluje) i pozbyłem się kilku nawiasów. Mam nadzieję, że znaczenie programu się nie zmieniło.
@KrzaQ2: 27 linijek trochę trudno ocenić. :) Z natury rzeczy można się czepiać pierdółek odnośnie stylu, przy czym nawet trudno powiedzieć, na ile to obiektywne zarzuty, a na ile próba wciśnięcia Tobie mojego stylu.

toCurrentLevel x = reverse $ snd (toCurrentLevelImpl (x, []))

levelsAtIndex contents = toCurrentLevel (map parenToOffset contents)

i pozostałe miejsca tego typu


Nie bój się używać $, moim zdaniem bardzo ułatwia czytanie kodu w przeciwieństwie do nawału nawiasów.
@Almagest: Jutro przeanalizuję. Thx.

@alkan: Nie mam cierpliwości do tutoriali, a syntax jest mi obcy, więc nic dziwnego, ƶe programuję w C++/D/czymkolwiek w Haskellu :P Dzięki za rady, jutro się przyjrzę :)