构建Haskell程序

时间:2016-08-10 07:32:46

标签: haskell

我试图尽可能地构建一个haskell模块,这就是我想出来的。

输入可以是Fix或Twitter 并且可以输出解析器的输出,我想将解析器的输出标记为Structured或Unstructured。

这是正确的类型签名吗?我正确使用了monad实例类吗?这是处理haskell副作用的正确方法吗?

module Parsers.Parser(
      handle
    ) where

data Input = FIX Text
        | Twitter Text

data Output = StructuredDataEvent Quote 
            | UnStructuredDataEvent  Text

handle :: Input -> Output
handle (FIX r)      = fixParser  r >>=   StructuredDataEvent  
handle (Twitter r)  = twitterParser  r >>=  UnStructuredDataEvent

sideEffects:: Output -> Output
sideEffects   a = LogEventToDatabase a

instance Monad Maybe where  
    return x = Just $ sideEffects x  
    Nothing >>= f = Nothing  
    Just x >>= f  = f $ sideEffects x  
    fail _ =  Nothing  

1 个答案:

答案 0 :(得分:1)

如果你真的想做副作用,

CGBitmapContextCreate应该是handle类型。

但是最好编写一个纯解析器来保存所有错误消息的列表。如果它们只是Input -> IO Output,例如using the Writer monad

String

另外,您考虑过using Parsec,这是monad变压器吗?