2014-11-16 4 views
3

Вот мой код:метод Haskell IO, который не делает ничего

foo :: Int -> IO() 
foo a 
    | a > 100 = putStr "" 
    | otherwise = putStrLn "YES!!!" 

Функция должна вывести "YES !!!" если оно меньше 100 и ничего не выводит, если оно больше 100. Хотя вышеописанное работает, существует более формальный способ вернуть ничего, кроме печати пустой строки. например

foo :: Int -> IO() 
foo a 
    | a > 100 = Nothing 
    | otherwise = putStrLn "YES!!!" 

ответ

10
foo :: Int -> IO() 
foo a 
    | a > 100 = return() 
    | otherwise = putStrLn "YES!!!" 
+0

Ницца! Я пробовал это, но без части «()» и так не работал! –

6

Если импортировать Control.Monad, вы будете иметь доступ к when и unless функций, которые имеют типы

when, unless :: Monad m => Bool -> m() -> m() 

и могут быть использованы в данном случае, как

foo a = when (not $ a > 100) $ putStrLn "YES!!!" 

Или более предпочтительная форма

foo a = unless (a > 100) $ putStrLn "YES!!!" 

unless функция только определяется в терминах when как:

unless b m = when (not b) m 
Смежные вопросы