105: (lib/Prelude.hs) instance Enum Char の定義で types do not unify

↑up

概要

instance Enum Char の宣言を The language report のようにしようとすると、 types do not unify エラー。

現状では、エラーする部分をコメントアウトしてある:

instance Enum Char where
  toEnum = Prim.intToChar
  fromEnum = Prim.charToInt
  {-
  enumFrom c = map toEnum [fromEnum c .. 1114111]
  enumFromThen c c' = map [fromEnum c, fromEnum c' .. lastint]
    where lastint :: Int
          lastint | c' < c    = 0
                  | otherwise = 1114111
  -}

調査ログ

2020-10-19 (Mon)

書き間違いが原因だった。

--- a/compiler/lib/Prelude.hs
+++ b/compiler/lib/Prelude.hs
@@ -330,14 +330,11 @@ instance Ord Char where
 instance Enum Char where
   toEnum = Prim.intToChar
   fromEnum = Prim.charToInt
-  {-
   enumFrom c = map toEnum [fromEnum c .. 1114111]
-  enumFromThen c c' = map [fromEnum c, fromEnum c' .. lastint]
-    where lastint :: Int
-          lastint | c' < c    = 0
+  enumFromThen c c' = map toEnum [fromEnum c, fromEnum c' .. lastInt]
+    where lastInt | c' < c    = 0
                   | otherwise = 1114111
-  -}
-  
+

test/sample305.hs を追加。