У меня есть игра, пользователь против компьютера, и я хочу случайным образом выбрать, кто запускает игру.У меня есть
a = getStdRandom $ randomR (0, 1)
Это получает случайное число 0 или 1. Однако это IO Int
, поэтому у меня не может быть оператора if, сравнивающего его с числом типа
if a == 0 then userStarts else computerStarts
Я пытался сравнить IO Int
с IO Int
, и это не работает, и я также пытался
Преобразование IO Int в Int
IЯ очень новичок в Haskell, не знаю, как подойти к этому.Запрошенные детали кода:
randomNumber = getStdRandom $ randomR (0, length symbols - 5) -- this will be 0 or 1
randomNumber2 = getStdRandom $ randomR (0, length symbols - 5) -- according to
-- the solution I need another function returning IO int.
a = do
x <- randomNumber
randomNumber2 $ pureFunction x
Ошибка, которую я получаю:
• Couldn't match expected type ‘t0 -> IO b
with actual type ‘IO Int’
• The first argument of ($) takes one argument,
but its type ‘IO Int’ has none
In a stmt of a 'do' block: randomNumber2 $ pureFunction x
In the expression:
do x <- randomNumber
randomNumber2 $ pureFunction x
• Relevant bindings include
a :: IO b
(bound at Path:87:1)
randomNumber2 $ pureFunction x
Path:89:20: error:
Variable not in scope: pureFunction :: Int -> t0
randomNumber2 $ pureFunction x