101: splitat2.hs で context reduction エラー

↑up

概要

splitat2.hs で context reduction エラー。 splitAt と直接関係なく、Char をまだ Enum クラスのインスタンスとして宣言していなかったのが原因。

調査ログ

2020-06-07 (Sun)

instance Enum Char を宣言する。

これをやろうとして気づいたのだが、Haskell の Char は、 unicode の codepoint に当たる整数値を保持していて、Java の char とは対応しない (Java の char は UTF-16)。現状の runtime 実装では、LitChar が char で実装されているので、このままでは Char に関する toEnum, fromEnum の実装に支障がでる。

そこで、まず、LitChar を変更し、int 型で codepoint を保持するようにし、 関連する関数 (fromJString, toJString など)も変更。

そのうえで、instance Enum Char に必要な関数(Prim.intToChar, Prim.charToInt) を実装した。

instance Enum Char を宣言することで、splitat2.hs は通るようになった。 しかし、この宣言時にコンパイラの不具合を踏んでしまい、instance Enum Char の実装はまだ完全ではない(新規 issue 105)。