module PRO where
average1 :: IO ()
average1 =
do
putStrLn "Enter Marks in Form of a List"
marks <- getLine
let m = (read marks)::[Int]
let x = sum' m
let avg = (fromIntegral x)/(fromIntegral $ length m)
if(m==[])
then
putStrLn ("empty List")
else
putStrLn ("Your Avarage is " ++ (show avg))
sum' :: (Num a) => [a] -> a
sum' xs = foldl (\acc x -> acc + x) 0 xs
i) Неверная подпись типа average1
, функция не возвращает значение
ii) [Редактировать: эта точка неверна]
iii)среднее значение - это число с плавающей запятой, поэтому вам необходимо привести целочисленные аргументы
iv) Ваш тест if (x/=[])
неверный и должен использовать m
, а не x
v)большинство ваших строк не в монаде IO
и поэтому должны использовать let
внутри блока do