083 で、左辺のパターンにリテラルがあるケースには対処したのだが、 そもそも、浮動小数点数リテラルに未対応だった。
litpatterns2b.hs も同様
浮動小数点数リテラル対応にむけ、もっと単純化したテストケースを用意 (floatliteral.hs):
main = print (3.14 :: Double)
これをコンパイルすると、以下のようなエラーになる。
doCompile ... bunnyc: Non-exhaustive patterns in renExp: LitExp (LitFloat 3.14 (1,15))
浮動小数点リテラルを、Rational 値に fromRational を適用した形として扱うように修正。 lexer で Float 型として扱ってしまっていたのを Double に直すなど、 意外と多くの修正が必要だった(変更箇所)。
floatliteral.hs はこれで通るように。 litpattern2.hs はエラーになる。f に型注釈とつけると通った (litpattern2c.hs):
f :: Double -> String f 0.0 = "0.0" f _ = "non-zero" main = do putStrLn $ f 1.0 putStrLn $ f 0.0
また、呼び出し側の値に型注釈をつけても通る (litpattern2d.hs):
f 0.0 = "0.0" f _ = "non-zero" main = do putStrLn $ f (1::Double) putStrLn $ f (0::Double)
これは、Fraction に関する defaulting に未対応であるせいだと思われる。 この件のテストとして、litpattern2.hs を少し改変して以下のようにしておく:
f 0.0 = "0.0" f _ = "non-zero" main = do putStrLn $ f 1 putStrLn $ f 0.0
この件は、継続(defaulting 対応まで保留)。
以下を test に追加:
全件確認中。
unno@unno-FMVD70GN7G ~/work/bissues/087 $ cat litpattern2.hs f 0.0 = "0.0" f _ = "non-zero" main = do putStrLn $ f 1 putStrLn $ f 0.0 unno@unno-FMVD70GN7G ~/work/bissues/087 $ runhaskell litpattern2.hs non-zero 0.0 unno@unno-FMVD70GN7G ~/work/bissues/087 $ ~/prj/bunny/compiler/bin/bunny testrun litpattern2.hs /home/unno/prj/bunny/compiler/bin/bunnyc -d ./jout/litpattern2 --xno-implicit-prelude /home/unno/prj/bunny/compiler/bin/../lib/Prelude.hs /home/unno/prj/bunny/compiler/bin/bunnyc -d ./jout/litpattern2 --xlibrary-path /home/unno/prj/bunny/compiler/bin/../lib litpattern2.hs bunnyc: cannot resolve ambiguity: [(Tyvar "v8806" Star,[IsIn "Prelude.Fractional" (TVar (Tyvar "v8806" Star))]),(Tyvar "v8798" Star,[IsIn "Prelude.Fractional" (TVar (Tyvar "v8798" Star))])] testrun: failed to compile litpattern2.hs