여기에 if 문에서 사용하려는 작은 코드 블록이 있습니다. 코드 내 이해에서 더 아래 다음람다 내부에서 IO Int를 비교하는 중 오류가 발생했습니다.
getRandomInt :: (Int, Int) -> IO Int
getRandomInt (a, b) = do
g <- newStdGen
return . fst $ randomR (a, b) g
...
if ((getRandomInt (0,1)) >>= (\x -> x == 1))
이며,이 randomInt == 1
아래로 컴파일하고 내부 if 문으로 사용할 수 있어야합니다. 대신에; 나는이 오류를 얻을 : 어떤 뻔뻔스러운 오해에 대한
word.hs:30:21:
Couldn't match expected type `Bool' with actual type `IO b0'
In the expression: ((getRandomInt (0, 1)) >>= (\ x -> x == 1))
In a stmt of a 'do' block:
if ((getRandomInt (0, 1)) >>= (\ x -> x == 1)) then
getRandomVowel : (getWord $ len - 1)
else
getRandomConsonant : (getWord $ len - 1)
In the expression:
do { if ((getRandomInt (0, 1)) >>= (\ x -> x == 1)) then
getRandomVowel : (getWord $ len - 1)
else
getRandomConsonant : (getWord $ len - 1) }
미안, 난 그냥 어제 하스켈을 배우기 시작했다.
나는 당신이 제안한 것을 시도했다. 그러나 이것은 내가 처음 게시물에 편집 한 다소 더 비밀스러운 오류만을 주었다. – Aearnus
그것은'getWord'에서 다른 문제입니다. '[IO Char] '대신에 타입을'IO [Char]'로 변경해보십시오 - 그것들은 매우 다른 두 가지입니다. 'if'의 각 브랜치와'otherwise'의 경우에는 몸에'return's이 필요할 것입니다. –
오, 나는 나머지 기능에서 내가 잘못한 것을 본다.나머지 부분을 고치면이 오류에 대해 더 자세히 살펴볼 것입니다. 이 오류는이 기능이 고장 나서 발생하지 않는 한. – Aearnus