0
안에 나는 랜드 - 모나드 내부 runST
을하고 싶지,하지만 난 오른쪽 종류를 얻을 수 GHC의 출력은 특히 도움이되지 않습니다 : 입력에runST는 MonadRandom
import Control.Monad
import Control.Monad.Random as MR
import Control.Monad.ST
import Control.Monad.Trans
import qualified Data.Vector.Unboxed as VU
shuffle :: (MonadRandom m) => m (VU.Vector Int)
shuffle = do
k <- getRandomR (0::Int, 10::Int)
let vec = runST $ do
vector <- VU.unsafeThaw (VU.enumFromN (1::Int) k)
vector' <- VU.unsafeFreeze vector
return vector
return vec
구문 분석 오류 ' 벡터 '
우수 : 여기
코드를 노력하고 있습니다. 이중 공백 들여 쓰기 탭은 놓치기 쉽습니다. 어떻게 runST를 무작위 모나드로 옮길 필요가 없습니까? 돌려 주겠니? – tsorn'runST'는 순수한 값 (이 경우 당신의 벡터)를 반환하고,'return'은 값을 모나드에 "넣습니다". – Erik
또는'do'를 잊어 버리십시오. 왜냐하면'do'는 임시 벡터의 이름을 생성하게 만드는 것입니다.'return. runST $ VU.unsafeThaw (VU.enumFromN (1 :: Int) k) >> = VU.unsafeFreeze' – amalloy