haskell函数的解释

dag*_*da1 1 haskell function

我正在看的代码包含这个顶级函数:

starman :: String -> Int -> IO ()
starman word n = turn word ['-' | x <- word] n
Run Code Online (Sandbox Code Playgroud)

我可以看到这是一个带有2个参数的函数,然后调用如下所示的turn函数:

turn :: String -> String -> Int -> IO ()
turn word display n =
  do if n==0
       then putStrLn "You lose"
       else if word==display
              then putStrLn "You win!"
              else mkguess word display n
Run Code Online (Sandbox Code Playgroud)

我不明白的是这意味着什么:

word ['-' | x <- word]
Run Code Online (Sandbox Code Playgroud)

use*_*559 5

全线是:

starman word n = turn word ['-' | x <- word] n
Run Code Online (Sandbox Code Playgroud)

turn 用三个参数调用:

word
['-' | x <- word]
n
Run Code Online (Sandbox Code Playgroud)

中间的那个是你遇到麻烦的.它可以理解为:"单词中每个字符的连字符."

所以['-' | x <- "hello"]"-----".

这种结构称为列表理解.

编辑

列表理解与此相同,这在意图中可能更清晰?

replicate (length word) '-'
Run Code Online (Sandbox Code Playgroud)