Skip to content

Latest commit

 

History

History
64 lines (41 loc) · 2.8 KB

workshop-2016.7.21.md

File metadata and controls

64 lines (41 loc) · 2.8 KB

本次目標

  • 實作 desugar 的骨幹, 走訪整個 syntax tree
    (可以定義一個 class, 然後把所有的 syntax node type 加進 instance;
    或是為每一個 syntax node type 定義一個不一樣的函數名的作法也可以;
    也可以兩種都有...)

  • 定義自己的 monad 來攜帶未來要加的資料結構, 讓這個骨幹的運行是在這個 monad 裡
    (使用 mtl 的 Control.Monad.State 也可以)

  • [預計在這之後的下一步]
    實作 global/local fixity decl, 把 infix 語法都轉換為 prefix 語法 (依正確的 fixity 作結合)

  • [Bonus]
    擴充 import ,支援壓縮起來的 package

雜談

  • LCamel 想找方法知道 data 裡的 value contructors 。 petercommand 表示之前用 GHC generics 做到過。 LCamel 自己查到的方式是 Data.DataData.Typeable 做到。詳見 reflection.md

    > data A = B Int | C deriving (Typeable, Data)
    
    > typeOf (B 10)
    A
    > dataTypeOf (B 10)
    DataType {tycon = "A", datarep = AlgRep [B, C]}
    
  • CindyLinz 提到 let a = a in a 是土砲的 undefined

  • 假設知道自己在幹嘛,可以用 Data.Data.Internal 來得到沒有 export 出來的東西。

  • Cindy 表示做 (>>=) 跟用 (>>=) 好像國營機構和民營化,設計上得有取捨。

  • undefined :: SomeTypeProxy :: Proxy SomeType 的風格差異。

  • LCamel 好奇 GHC 有沒有什麼工具可以自己做 deriving 。 petercommand 說明怎麼用 GHC.Generics 套用自己的實作。

  • LCamel 繼續研究 Aeson 的 toJSON 是怎麼做的。

  • Cindy 發現 Data.Data 裡面有 constrFields 等函數,也許可以幫得上忙。

  • petercommand, Options 取代 Maybe

  • Alex 找到 Haskell Report 中建議的 Prelude 包含了一些建議的 class 和 lib 。 Cindy 表示 GHC 沒有照它做,甚至有少。

  • petercommand 以為開了 NoExplicitPrelude 還是有 IO 可以用, LCamel 一試發現什麼都沒有 XDDD

    stack ghci --ghci-options "-XNoImplicitPrelude"
    
  • import System.IO 後有 hPutStrLnstdout 可以用 XD

下次聚會時間

2016.08.11(四)