我对Haskell的经验不是很丰富,所以我不太确定发生了什么。我想生成一个随机IP地址列表并打印出来,但是我仍然遇到以下错误:
我的代码:
import System.Random (randomRIO)
import Data.List
import Control.Monad.Cont
main :: IO ()
main = do
let maxtests = 5
let mylist = createList maxtests []
forM_ mylist $ \ip -> do
print ip
createList :: Int -> [[Char]] -> [[Char]]
createList 0 mylist = return mylist
createList n mylist = do
myarr <- randomIp 4
let myip = (show (myarr !! 0)) ++ "." ++ (show (myarr !! 1)) ++ "." ++ (show (myarr !! 2)) ++ "." ++ (show (myarr !! 3))
let mylist2 = mylist ++ [myip]
let mylist3 = createList (n-1) mylist2
return mylist3
randomIp :: Int -> IO([Int])
randomIp 0 = return []
randomIp n = do
r <- randomRIO (0,255)
rs <- randomIp (n-1)
return (r:rs)
我编译时的错误消息:
test2.hs:13:23: error:
* Couldn't match type `[Char]' with `Char'
Expected type: [[Char]]
actual type: [[[Char]]]
* In the expression: return mylist
In an equation for `createList':
createList 0 mylist = return mylist
|
13 | createList 0 mylist = return mylist
| ^^^^^^^^^^^^^
test2.hs:15:14: error:
* Couldn't match type `IO' with `[]'
Expected type: [[Int]]
actual type: IO [Int]
* In a stmt of a 'do' block: myarr <- randomIp 4
In the expression:
do myarr <- randomIp 4
let myip
= (show (myarr !! 0))
++
"."
++
(show (myarr !! 1))
++ "." ++ (show (myarr !! 2)) ++ "." ++ (show (myarr !! 3))
let mylist2 = mylist ++ ...
let mylist3 = createList (n - 1) mylist2
....
In an equation for `createList':
createList n mylist
= do myarr <- randomIp 4
let myip = ...
let mylist2 = ...
....
|
15 | myarr <- randomIp 4
| ^^^^^^^^^^
test2.hs:19:5: error:
* Couldn't match type `[Char]' with `Char'
Expected type: [[Char]]
actual type: [[[Char]]]
* In a stmt of a 'do' block: return mylist3
In the expression:
do myarr <- randomIp 4
let myip
= (show (myarr !! 0))
++
"."
++
(show (myarr !! 1))
++ "." ++ (show (myarr !! 2)) ++ "." ++ (show (myarr !! 3))
let mylist2 = mylist ++ ...
let mylist3 = createList (n - 1) mylist2
....
In an equation for `createList':
createList n mylist
= do myarr <- randomIp 4
let myip = ...
let mylist2 = ...
....
|
19 | return mylist3
| ^^^^^^^^^^^^^^
对于我在做什么错的任何指示,我们将不胜感激。