# bunny notes Haskell で書いている Haskell コンパイラ、 [bunny](https://github.com/unnohideyuki/bunny) に関するノート。 - 2020-11-16: [0.9 版にむけたにっきをつけはじめました](thirtydays2release09) - 2020-12-21: [0.9.1 版むけ要対応項目](issues4bunny091) を一覧にした これら issue に対処するのと並行して、特に重要だと思われる3つのソースについて集中リーディングと code walkthrough ドキュメントの作成を始める: - [リーディングメモ](bunnyReading090) - [DictPass](bunnyDictPass090) - [Rename](bunnyRename090) - [RenUtil](bunnyRenUtil090) めも: - [Architecture.md](https://matklad.github.io//2021/02/06/ARCHITECTURE.md.html) ## Issue 一覧 分類: A (サンプルケースの fail)、B (機能追加)、C(改善)、D (要調査) ([template](bissue_template)) ### A: サンプルケースが fail しているもの - [Closed] [001](bissue001): adt-sample2 で types do not unify: (TCon (Tycon "Prelude.Int" Star),TCon (Tycon "Prelude.Integer" Star)) - [Closed] [002](bissue002): adt-sample3 で bunnyc: renSigDoc $ A.Tycon MyEither - [Closed] [003](bissue003): adt-sample4 で bunnyc: Non-exhaustive patterns: Nat - [Closed] [008](bissue008): nodup.hs が renRhs の未実装でエラー - [Closed] [009](bissue009): nodup0.hs で dictionary not found - [Closed] [010](bissue010): sigdoc1.hs で variable not found - [Closed] [011](bissue011): trcore-err1.hs がランタイムにおいて abend - [Closed] [012](bissue012): qsort に型注釈をつけるとエラー - [Closed] [018](bissue018): 掛け算未対応 (test3_2_002) - [Closed] [020](bissue020): infixl_add_mul.hs で context reduction - [Closed] [021](bissue021): infixl_add_mul2.hs で演算子の優先順位が不適切 - [Closed] [022](bissue022): infixl_add_mul3.hs で types do not unify - [Closed] [024](bissue024): nodup0bx.hs で matchVarCon error: ([PWildcard],OtherExpression ... - [Closed] [028](bissue028): numnmonad.hs で dictionary not found: Prelude.>> - [Closed] [030](bissue030): mycompare2.hs で cannot find symbol: Prim.mk_40__41_() - [Closed] [031](bissue031): ordtest.hs で UMinusExp 未実装 - [Closed] [034](bissue034): myeq.hs, myeq2.hs で matchVarCon error: ([PWildcard,PWildcard],OtherExpression (Const ("Prim.False" :>: Forall [] ([] :=> TCon (Tycon "Bool" Star))))) - [Closed] [035](bissue035): myeq3.hs がランタイムで Error: Non-exhaustive patterns. - [Closed] [041](bissue041): tqd.hs で context reduction, Show [a] 問題 - [Closed] [042](bissue042): showpair.hs で context reduction, Show (a, b) 問題 - [Closed] [044](bissue044): intlit.hs で types do not unify: (TCon (Tycon "Prelude.Int" Star),TCon (Tycon "Prelude.Integer" Star)) - [Closed] [047](bissue047): showpair0.hs がランタイムに IntegerShowFunc: must not occur - [Closed] [048](bissue048): char リテラルにおけるエスケープが処理されず Error: lexical error in char literal, \'' - [049](bissue049): contextorder1.hs (2020-04-28) - [050](bissue050): contextorder1b.hs (2020-04-28) - [051](bissue051): contextorder2.hs (2020-04-28) - [Closed] [052](bissue052): (サンプルコード未作成) CompositDict に引数を受け渡す処理がまずい - [Closed] [054](bissue054): strlen.hs で renPat: LitExp (LitString "" (1,8)) - [Closed] [056](bissue056): retint.hs で cannot resolve ambiguity - [Closed] [057](bissue057): tysigterm.hs で renExp: ExpWithTySig 未対応エラー - [Closed] [058](bissue058): test3_5_001, test3_5_002 で renExp: Section[L|R] - [Closed] [060](bissue060): wheresample.hs で IntegerShowFunc: must not occur - [Closed] [064](bissue064): take.hs で Non-exaustive Patterns in transExpr - [Closed] [065](bissue065): listofstr.sh などで Non-exhaustive patterns in function simpleTy2dict - [Closed] [067](bissue067): showlist2.hs がランタイムに abend - [Closed] [068](bissue068): pairbind.hs で qname not found - [Closed] [069](bissue069): plus3c.hs で unexpected exp - [Closed] [070](bissue070): t4.4.3.1a.hs で qname not found: ## - [Closed] [073](bissue073): ptype[1|2] で dictionary not found - [Closed] [074](bissue074): pairbind_and_wherebind.hs が trArPat 未対応でエラー - [075](bissue075): lsbind_irrefutable.hs がエラーせずに誤った結果を出力 - [Closed] [076](bissue076): showlist2.hs が再びエラー、dictionary not found - [078](bissue078): instanceshow.hs で unbound identifier: Main.show - [Closed] [083](bissue083): litpattern.hs で renPat: LitExp (LitInteger 0 (1,3)) - [Closed] [084](bissue084): litpatternb.hs で parseError: TInteger (0,AlexPn 24 2 3) - [Closed] [085](bissue085): oddInt.hs がランタイムで abend - [087](bissue087): litpattern2.hs で Non-exhaustive patterns in renExp: LitExp (LitFloat 0.0 (1,3)) - [Closed] [090](bissue090): strlenx.hs がランタイムで abend - [Closed] [091](bissue091): divquot2.hs がランタイムで abend - [Closed] [092](bissue092): gcdlcm.hs が通らなくなった - [Closed] [097](bissue097): eqcls.hs で signature too general - [Closed] [098](bissue098): either.hs で context reduction - [Closed] [099](bissue099): last.hs, init.hs で occurs check fails - [Closed] [100](bissue100): iotest.hs で期待された出力がでない - [Closed] [101](bissue101): splitat2.hs で context reduction エラー - [Closed] [102](bissue102): lines.hs の出力が期待通りでない - [Closed] [103](bissue103): mapm.hs で context reduction - [Closed] [104](bissue104): (lib/Prelude.hs) instance Functor [] などがエラー - [Closed] [105](bissue105): (lib/Prelude.hs) instance Enum Char の定義で types do not unify - [Closed] [106](bissue106): unichar.hs で lexical error - [Closed] [109](bissue109): Ratio の show が負のケースに未対応 - [Closed] [112](bissue112): triple2.hs で qname not found - [Closed] [114](bissue114): myeq x y = (==x) y が正しく動かない - [115](bissue115): defdup.hs がエラーしない - [Closed] [116](bissue116): print $ a*b + c *d が型エラーになる - [117](bissue117): defaultdouble.hs がランタイムにエラーする - [118](bissue118): (Monad m) => Int -> m Int の Kind を推定できない - [Closed] [119](bissue119): List comprehension における Fail がランタイムエラーになる - [120](bissue120): s@(c:_) がコンパイルエラー - [Closed] [124](bissue124): sample288 (浮動小数点演算) で期待値エラー ### B:機能追加 - 005: import 時に qualifier を適切に処理する - [Closed] [014](bissue014): 単純なケースで Show をサポートする - [Closed] [015](bissue015): エラーが期待されるテストケースもサポートする - [Closed] [017](bissue017): Show クラスでないものでも show できてしまう - [Closed] [023](bissue023): lib/Prelude.hs の Ord クラス定義を完成させる - [Closed] [033](bissue033): Prelude における Num クラスとインスタンスを完成させる - [036](bissue036) deriving 構文をサポートする - [Closed] [037](bissue037) ともかく Ord Ordering を書く - [Closed] [059](bissue059): Arithmetic Sequences の実装 - [Closed] [077](bissue077): Num を Eq, Show 2つのサブクラスにする - [Closed] [079](bissue079): Prelude にて、Show より前に Num のクラス宣言を書けるようにする - [080](bissue080): Standard Prelude 実装 - [Closed] [081](bissue081): PreludeList 実装 - [096](bissue096): Monomorphism Restriction の実装 - [108](bissue108): Ratio クラスの作成 - [111](bissue111): PreludeIO の実装 - [113](bissue113): newtype の実装 - [121](bissue121): ARCHITECTORE.md, ARCHITECTURE-ja.md を書く ### C:改善項目 [未分類のメモ](bunny_memos) - [Closed] [004](bissue004): renSigdoc (A.Tycon n) _ がハードコーディングされているのを直す - 007: preludeClasses が未使用になっていたのでこれを削除したが、ここからしか使われていなかった未使用コードも消そう - [Rejected] [013](bissue013): Typing で各項に型をつけるようにする - [Closed] [019](bissue019): Integer が多倍長になっていない - [025](bissue025): Absyn.ParTy 取り除けるのでは - [026](bissue026): クラス定義の取り扱いをきちんと一般的に - [027](bissue027): ${<$>} を使おう - [029](bissue029): renRhs が GuardedRhs の単純なケースしか対応していない - [Closed] [032](bissue032): Ord インスタンスの定義を minimum complete definition に - [Closed] [039](bissue039): Prim.show の整理 - [Closed] [040](bissue040): Core.hs にある古い PP の残骸を消す - [043](bissue043): Prim が名前空間を汚している - [045](bissue045): DictPass における defaulting がその場しのぎ - [046](bissue046): ラインタイムの Literal, LitInt, LitFloat etc. は Value 的な名前に変えたほうがいいのでは - [053](bissue053): Show Char においてエスケープ未対応 - [Closed] [055](bissue055): showList のデフォルト実装ではエラー - [063](bissue063): 実行トレースに代わる手段 - [Closed] [072](bissue072): Integral の定義をただしく - [086](bissue086): checklit の網羅性を確認 - [089](bissue089): 式変換で生成する変数名について - [Closed] [093](bissue093): 単純な高速化の実施 - [094](bissue094): Subst 高速化 - [Closed] [095](bissue095): 型チェックの方式変更(正常化) - [Pending] [110](bissue110): Fractional の計算精度 (★優先) - [125](bissue125): RenUtil における MonadFail の扱い ### D:要調査 - 006: Rename 環境にくわえた TypeConsts は Assump でなくていいのか(型か型スキームか or 型構築子の型は多相になるか) - [Closed] [016](bissue016): Prim.java にある ShowFunc.call の引数が、なぜ AtomExpr ではなく、AtomExpr[] (配列)になっているのか - [038](bissue038): False && undefined = False - [061](bissue061): 辞書渡しの条件確認、みなおし - [062](bissue062): Integer から Int への変換が不正確になる場合の挙動 - [066](bissue066): Guard の仕様をしらべて未対応ケースにあたるテストプログラムを作成する - [071](bissue071): regFixity で qname 登録するのはイマイチっぽい - [Closed] [082](bissue082): トポロジカルソートについて調べる - [088](bissue088): Binding Groups について調べる - [107](bissue107): ~ について調べる - [122](bissue122): トランポリンについて教えてもらったことをまとめる - [123](bissue123) : トップレベル束縛は defaulting されるはずでは ## テストケース一覧 - [testcases/chap3](bunny_testchap3) ## モジュール毎のノート - src/Absyn.hs - src/BindGrouping.hs - src/CodeGen.hs - src/CompilerOpts.hs - src/Core.hs - src/DDumpAssump.hs - src/DDumpCore.hs - src/Desugar.hs - src/DictPass.hs - src/NameMangle.hs - src/Pattern.hs - src/PPCore.hs - src/PPTypes.hs - src/PreDefined.hs - [src/Rename.hs](bunny_Rename) - src/RenUtil.hs - src/Semant.hs - src/STG.hs - src/Symbol.hs - src/TrCore.hs - src/TrSTG.hs - src/Types.hs - src/Typing.hs - app/Main.hs