최근 하스켈을 배우기 시작했습니다. 나는 배열의 임의 요소 선택 프로그램을 작성하려고 해요 :하스켈 IO Int 및 Int
import System.Random
randomInt :: (Int, Int) -> IO Int
randomInt range = randomRIO range :: IO Int
choseRandom :: [a] -> a
choseRandom list =
length list
>>=
(\l -> randomInt(0,l-1))
>>=
(\num -> (list !! num))
main :: IO()
main = undefined
을 나는 다음과 같은 오류 얻을 : 내가 잘못 뭘하는지
Build FAILED
C:\Users\User\Haskell\Real\src\Main.hs: line 7, column 9:
Couldn't match expected type `IO Int' with actual type `Int'
In the return type of a call of `length'
In the first argument of `(>>=)', namely `length list'
In the first argument of `(>>=)', namely
`length list >>= (\ l -> randomInt (0, l - 1))'
를? , 당신이 얻을 >>=
를 사용할 필요가 없습니다 둘째
choseRandom :: [a] -> IO a
: 당신이 choseRandom
내에서 IO를 사용하고 있기 때문에 내가 당신이 유형의 서명을 변경해야 할 첫 번째 시간
일단 'fmap'아이디어를 얻으면 추한'(\ num -> (list !! num))'은'(list !!)'로 단축 될 수 있습니다. – Ingo