Wtedy w ogóle nie potrzebiwalibyśmy takich wymysłów jak One.
Przecież klasa typu One
to tylko bardziej specyficzna wersja Applicative
, a metoda one
to bardziej specyficzna wersja pure
@cerrato: Taki chyba jest pomysł KamilAdam :-)
Btw. ja też nie rozumiem. Jak Text Applicative? Text nawet nie jest polimorficzny.
Chodzi mi o kod:
instance Applicative T.Text where
pure :: Char -> T.Text
pure = T.singleton
Chociaż teraz widzę że Applicative
ma też inne metody. Czyli trzeba by wyciągnąć z Applicative
klasę bazową Purable
co oczywiście jest niemożliwe :(
I tak by się nie zgadzało. Applicative jest dla typów polimorficznych. (*->*
). Czyli pure
powinno być od dowolnego typu, a nie tylko Char
.
Może napisz co właściwie chciałeś osiągnąć uprościć?
Czyli pure powinno być od dowolnego typu, a nie tylko Char.
OK, teraz rozumiem
Może napisz co właściwie chciałeś osiągnąć uprościć?
Pozbyć się One i zamiast tego używać pure
A ogólnie to zastanawiam się jakie klasy typów powinienna "dziedziczyć" hipotetyczna klasa typu Collection
. Po czym wpada się na taki Text
który wszystko rozwala :D
Pewnie skończy się na czytaniu kodu classy-prelude: A typeclass-based Prelude.
Może Text
nie powinien być Collection? W zasadzie istnienie klasy Text
wynika z faktu, że ktoś kiedyś stwierdził, że String
to po prostu Lista
znaków. Co może pójść nie tak.
No, ale Lista to nie jedyny Collection. Jest też Set i Sequence, a może nawet Map jakby dobrze to zaplanować. Taki spólny interfejs ułatwia pisanie funkcji narzędziowych. Teraz są sytuacje że coś działa dla String/List a nie działa dla Text, jakieś np wyszukiwanie czy dzielenie. Kończy się to na tym że kopiuje kod z bibliotek "standardowych" i przerabiam go żeby działał dla Text. Ale bardzo łatwo było by napisać tą funkcję żeby działała i dla Text i dla String i dla List i dla Sequence :) Trudno mi się powstrzymać :D