Haskell: функция для приема случайного Int

#haskell #random

#haskell #Случайный

Вопрос:

У меня есть базовая функция, которая принимает значение Int и возвращает список:

 generateCode rnd = 
  [sharpOrDot i rnd  | i <- [0..24]]
 

Я вызываю это из своей основной функции следующим образом:

 do
  r  <- (randomIO :: IO Int)
  generateCode r
 

Не r <- (randomIO :: Int) следует «распаковывать» Int часть IO Int и, следовательно, просто передавать Int в GenerateCode?

Возвращает ошибку

 Couldn't match expected type `IO a0' with actual type `[Char]'
 

Спасибо

Комментарии:

1. Сигнатура типа неверна — так и должно быть randomIO :: IO Int .

Ответ №1:

Я думаю, что последняя строка должна быть return (generateCode r) . Иначе ваш do -block «вырвался бы» из IO монады, что невозможно (ну, без использования функции с именем, которое мы не смеем озвучивать).