Haskell сложно! До сих пор я понял, что могу сделать следующее для имитации for-l oop в Haskell, чтобы получить список чисел от пользователя:
myList <- sequence [putStr "Enter an integer: " >> (
\s -> read s :: Int) <$> getLine | t <- [1..5]]
Отлично! Итак, myList
содержит пять целых чисел, которые я ввел. Большой! Но вот в чем подвох. Вместо for-l oop, который повторяется пять раз (или любое конечное число раз), как я могу преобразовать вышеприведенное в эквивалентное время, пока-l oop?
Итак, я думаю об этом, но, к сожалению, это не сработает. Есть ли какой-нибудь "волшебный" способ заставить его работать?
takeWhile (\x -> x > 0) $ sequence [putStr "Enter an integer: " >> (
\s -> read s :: Int) <$> getLine | t <- [1..]]
Проблема в том, что (\x -> x > 0)
работает с Ints. (Или любой тип Num.) Но то, что приходит из этого списка - это действительно куча IO Ints. x > 0
возвращает Bool. Мне нужна функция, которая возвращает IO Bool? Я немного растерялся. Может кто-нибудь указать мне путь к Haskell просветлению ?! Изучать это самостоятельно не совсем просто !!! Большое вам спасибо !!!