0
我試圖構建一個haskell模塊,盡我所能,這就是我想出的。構建一個Haskell程序
輸入可以是Fix或Twitter 並且可以輸出解析器的輸出,我想將解析器的輸出標記爲結構化或非結構化。
這是正確的類型簽名?我是否正確使用monad實例類?這是處理哈斯克爾副作用的正確方法嗎?
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
'Maybe'已經是'Monad'的一個實例。這通常也不清楚你在說什麼。這段代碼是否編譯? – dfeuer
如果這是編制和工作我是不太願意要他到堆棧溢出.... 這個心不是一個標準的單子也許...林伐木的東西到數據庫 返回X =只需$副作用X 僅售X >> = F = F $副作用X 我的問題是,這是否是處理副作用 而且因爲>>正確的做法=可返回任何結果爲: 手柄::輸入 - >輸出 或 手柄::輸入 - >可能輸出 正確的簽名 – Devitect
LogEventToDatabase是做什麼的?這可能不會通過單子法。回答你的問題:不,這不是在Haskell中處理副作用的正確方法。 – pdexter