У меня есть функция, которая выглядит следующим образом:Haskell - сопоставление с образцом и 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 тип возврата, так что типы не совпадают по этому погладить крачки. Но каков правильный/элегантный способ сделать это?