【发布时间】:2019-04-20 16:55:54
【问题描述】:
我有以下代码:
import Data.Array
import Control.Monad
import Data.Functor
import System.Random (randomRIO)
randomList 0 = return []
randomList n = do
r <- randomRIO (1,6)
rs <- randomList (n-1)
return (r:rs)
quicksort [] = []
quicksort (x:xs) =
let smallerSorted = quicksort [a | a <- xs, a <= x]
biggerSorted = quicksort [a | a <- xs, a > x]
in smallerSorted ++ [x] ++ biggerSorted
- randomList - 创建一个给定长度的列表并用随机值填充它;
- 快速排序 - 快速排序列表。
我需要对创建的数组进行排序:
quicksort (randomList 10),但是出现错误:
"Couldn't match expected type‘ [a] ’with actual type IO [Int]’"
【问题讨论】:
-
你应该
fmap quicksort (randomList 10)。 -
您应该在程序中包含所有顶级名称的类型签名。如果您不认识他们,请加载文件并询问 GHCi:
Main> :t randomList。然后将其复制粘贴到文件中(或根据您的需要先对其进行专门化)。将类型签名放在它描述的名称上方。 -
@WillemVanOnsem,是的,很好,就是这样。
标签: haskell type-mismatch io-monad do-notation