当前位置: 首页 > 知识库问答 >
问题:

Haskell:IO[String]到[String][重复]

孟成文
2023-03-14

现在这是一个已经经历了很多堆栈溢出的线程。这也被其他网站所覆盖,但我仍然无法完全理解。我从这个网站上读到了不同的东西,我在底部链接它们,但现在是问题。

像往常一样,我尝试从文件中读取行:

module BoardData where

readTable = do
  s <- readFile "projekt-board.txt"
  let content = lines s
  let removeEnd = init(content)
  let removeHead = tail(removeEnd)
  return removeHead

printTable [] = putStr ""
printTable [x] = putStrLn x
printTable (x:xs) = do
  let element = x
  putStrLn element
  printTable xs

我不明白为什么我没有得到一个IO[字符串]-

  • 有没有办法在IO[String]类型上耍花招,可以访问IO[String]列表中的每个元素,然后创建一个新的纯元素
  • 或者,我仍然可以使用IO[String]类型执行基本的列表操作(但是到目前为止,我的操作失败了)

我读过的一些阅读材料现在让我更加困惑:

  • IOMonad适用于那些根本不在乎的人

[编辑:调用时抛出的错误]

*BoardData> let it = printTable readTable in it

<interactive>:1:21: error:
    • Couldn't match expected type ‘[String]’
                  with actual type ‘IO [String]’
    • In the first argument of ‘printTable’, namely ‘readTable’
      In the expression: printTable readTable
      In an equation for ‘it’: it = printTable readTable

共有1个答案

田翰林
2023-03-14

只需在do块中使用printTable来处理readTable生成的字符串:

readTable = do
  s <- readFile "projekt-board.txt"
  let content = lines s
  let removeEnd = init(content)
  let removeHead = tail(removeEnd)
  printTable removeHead

您不能从IO monaddo-块出到纯Haskell世界中获得纯值;但是您不需要。

IOdo-块中的每一行都必须具有相同的类型,IO a-a当然可以变化,但它必须具有相同的形式IO ado块中最后一行的类型是整个do块的类型。例如,

 #> :t putStr ""
putStr "" :: IO ()

所以

printTable            :: String -> IO ()
           removeHead :: String
printTable removeHead ::           IO ()

适合。

 类似资料:
  • 问题内容: 我想 在Databricks中将转换为。 有人可以帮忙吗? 背景 (也欢迎一个更好的解决方案):我有一个Kafka流,经过一些步骤后,该流变成了2列数据帧。我想将其放入Redis缓存中,第一列作为键,第二列作为值。 更具体地说 ,输入的类型是:。我尝试放入Redis,如下所示: 错误消息如下所示: 我已经玩过一些想法(例如function ),但是没有一个帮助。 问题答案: 如果要将行

  • 描述 (Description) 此方法将使用给定替换匹配给定正则表达式的此字符串的第一个子字符串替换。 语法 (Syntax) 以下是此方法的语法 - public String replaceFirst(String regex, String replacement) 参数 (Parameters) 这是参数的细节 - regex - 要与此字符串匹配的正则表达式。 replacement

  • 描述 (Description) 此方法将使用给定替换匹配给定正则表达式的此字符串的每个子字符串替换。 语法 (Syntax) 以下是此方法的语法 - public String replaceAll(String regex, String replacement) 参数 (Parameters) 这是参数的细节 - regex - 要与此字符串匹配的正则表达式。 replacement -

  • Decode String 描述 Given an encoded string, return its decoded string. The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being repeated exactly k times. Not

  • 描述 (Description) java.lang.String.split(String regex)方法将此字符串拆分为给定正则表达式的匹配项。 此方法的工作方式与调用方法相同,即split(String regex,int limit)与给定的表达式和limit参数为零。 因此,结尾的空字符串不包含在结果数组中。 声明 (Declaration) 以下是java.lang.String.s

  • 描述 (Description) java.lang.String.concat()方法将指定的字符串连接到此字符串的末尾。 声明 (Declaration) 以下是java.lang.String.concat()方法的声明 public String concat(String str) 参数 (Parameters) str - 这是连接到此String末尾的String。 返回值 (Re