我有一个类似如下的功能:哈斯克尔 - 模式匹配和exitSuccess
outputDelayCo :: Maybe Int -> (Event -> ByteString) -> [Event] -> Int -> IO()
outputDelayCo Nothing = outputDelay Nothing
outputDelayCo (Just 1) = do exitSuccess
outputDelayCo (Just n) = outputDelay (Just (n-1))
我得到这个错误:
Couldn't match expected type ‘(Event -> ByteString)
-> [Event] -> Int -> IO()’
with actual type ‘IO a0’
In a stmt of a 'do' block: exitSuccess
In the expression: do { exitSuccess }
我可以这样做修复它,但它更丑陋:
outputDelayCo :: Maybe Int -> (Event -> ByteString) -> [Event] -> Int -> IO()
outputDelayCo Nothing a b c = outputDelay Nothing a b c
outputDelayCo (Just 1) _ _ _ = do exitSuccess
outputDelayCo (Just n) a b c = outputDelay (Just (n-1)) a b c
我明白为什么有一个错误:做exitSuccess是要去有一个IO返回类型,所以类型不上拍匹配燕鸥。但是,什么是正确的/优雅的方式来做到这一点?