Słyszałem, że Data.Text
ma zastąpić String
s w przyszłych wersjach Haskella. Mam jeden problem z tym, że (++)
jest zdefiniowany tylko dla list. Aby złączyć dwa Text
s, muszę korzystaćStandardowy sposób łączenia dwóch tekstów Data.Text bez `mappend`
text1 `mappend` text2
który dostaje VERBOSE szybko. Idealnie chciałbym móc użyć ++
na tych s, ale jeśli nie, jaka jest inna alternatywa? Mógłbym zdefiniować własnego operatora infiksów, ale chciałbym to zrobić w standardowy sposób.
To jest kiepsko nazwany operator. '<>' ma semantykę "nie równa się". Byłoby przyjemniej uogólniać '++', aby działało na wszystkich Monoidach. –
<> został wybrany, ponieważ był już używany przez ładne biblioteki drukarskie z semantyką monoidalną, i jest to najmniej natarczywa opcja, która nie łamie istniejącego kodu lub ma dziwne błędy. Generalizowanie (++) z drugiej strony, nie może być wykonane w sposób, który sprawia, że ładne ładne biblioteki drukowania ze względu na poziom pierwszeństwa, i miał jeszcze inne znaczenie przed haskell 98, kiedy był używany do tego, co mamy zadzwoń teraz do mplus. Gdybyśmy unikali rzeczy o znaczeniach w innych językach, nie mielibyśmy operatorów! Operatory <<, >>, -,!,%,: Itp. Mają również inne semantyki w innych językach. –
Dziwne, próbuję go użyć, ale otrzymuję komunikat "Not in scope:" <> ''. GHC 7.10.3 – klappvisor