2016-01-06 66 views
-3
case x of 
    Cond expr stmt -> do 
     checkExprType expr Bool 
     processStmt env stmt 
     return env 
    AnotherCond expr stmt -> do 
     checkExprType expr Bool 
     processStmt env stmt 
     return env 

這個複製粘貼如何消除?Haskell類似複製粘貼刪除的情況下

+0

詳細一點會更有幫助。但是,我認爲具有非常相似結構的兩個不同的值構造函數可能會讓您將它們合併爲一個。 – Akaberto

+0

你應該提供更多細節! – Emna

+0

關於這個問題有什麼不清楚?兩個塊看起來相同但類型不同。 – JKS

回答

4

你可以只讓本地定義這是exprstmt功能:

-- I assume this is all inside a 'do' block 
let conditionalLike expr stmt = do 
     checkExprType expr Bool 
     processStmt env stmt 
     return env 
case x of 
    Cond expr stmt -> conditionalLike expr stmt 
    AnotherCond expr stmt -> conditionalLike expr stmt