2013-04-16 29 views
3

我想編寫一個函數用於構建隨機數 的列表,來這裏的代碼編寫IVEHaskell的錯誤 - 無法匹配,期望型

buildlist :: Int -> Int -> [Int] 
buildlist n m = do 
    seed <- getStdGen 
    let l = randomRs (0, m) seed 
    let list = take n l 
    return list 

,然後將錯誤

Couldn't match expected type `[t0]' with actual type `IO StdGen' 
In a stmt of a 'do' block: seed <- getStdGen 
In the expression: 
    do { seed <- getStdGen; 
     let l = randomRs ... seed; 
     let list = take n l; 
     return list } 
In an equation for `buildlist': 
    buildlist n m 
     = do { seed <- getStdGen; 
      let l = ...; 
      let list = ...; 
      .... } 

ps.haskell與c,java,ruby有很大不同,我覺得我已經學會了編碼

回答

6

因爲你使用IO(getStdGen),所以整個函數必須在IO單子中。更改返回類型

buildList :: Int -> Int -> IO [Int] 

讀一本好書:-)

+0

感謝lot.it的很難買到一本關於中國的哈斯克爾。英文網站很難理解。 T_T – yck

+0

有兩本優秀的書籍可以在線閱讀:http://book.realworldhaskell.org/read/和http://learnyouahaskell.com/。不幸的是,我不知道任何中文材料,但如果您說其他語言,請查看http://www.haskell.org/haskellwiki/Books和http://www.haskell.org/haskellwiki/Tutorials。其他語言教程的翻譯會不時出現,因此請繼續檢查這些網站。也許你會將其中一個教程翻譯成你的語言! – mhwombat

+0

書很棒,謝謝 – yck

相關問題