Одним из основных преимуществ Haskell является то, что система типов обеспечивает отличие «чистых» функций от «нечистых» функций. У вас есть чистая функция - вы обещаете дать ей Integer
, а функция обещает всегда дать вам хороший результат (без ошибок). (Эти обещания исполняются на контрактной основе компилятором, т. Е. Во время компиляции, поскольку Haskell является языком статической типизации.) Это значительно упрощает анализ кода. Несмотря на то, что вам нужно разобраться с тем, что происходит, если ввод пользователя плохо ведется и может изменить функцию (и ее сигнатуру типа) для этого, рекомендуется размещать этот код в другом месте - например, там, где вы анализируете ввод от пользователя. ,
Возникает вопрос: как вы получаете ввод данных от пользователя, чтобы это могло быть Integer
или Float
или Double
? Простой шаблон будет что-то вроде, например.
import Text.Read
main = do
s <- getLine
case readMaybe s of
Nothing -> putStrLn "Please enter an integer"
Just x -> putStrLn $ days_in_Year x
Здесь, поскольку x
предоставляется в качестве аргумента для days_in_Year
, компилятор знает, что вы пытаетесь прочитать строку s
как Integer
, и если это невозможно (например, потому что s == "5.0"
), тогда он просто вернет Nothing
, и вы сможете сказать пользователю, что пошло не так.