第15章:解析器

夢飛發表於2017-03-04

1.引數解析

  • 解析器 parser 指的是從序列化之後的型別中提取出需要的資料型別的一類函式
  • 對於簡單的解析工作,可以使用Either資料型別以及他的應用例項

    data Either a b =  Left a | Right b
    
    
    instance Functor (Either a) where
        fmap _ (Left x) = Left x
        fmap f (Right y) = Right (f y)
    
    
    instance Applicative (Either e) where
        pure          = Right
        Left  e <*> _ = Left e
        Right f <*> r = fmap f r
    
  • 組合Either的關鍵:如果左邊的計算失敗了,就不在關心右側的值,而是把整個計算結果都標記成Left e

  • 任何解析器的核心都是建立在類似Either的資料結構之上,來實現及時的報錯和解析結果的自由組合

2. optparse-applicative

  • 以optparse-applicative為例
  • 沒有測試

3.選擇解析

  • Parser型別不僅是是一個應用函子,還是一個選擇應用函子,於是可以使用<|>來連線它們

理解不深入,回頭再看

相關文章