在Haskell中,从字符串获取一个字符串和一个整数

时间:2018-12-12 22:24:09

标签: haskell

我想在Haskell中编写一个函数,该函数可以执行以下操作:

getString:: String -> (String,Int)
getString "sum(6)" = ("sum",6)
getString "function1(10)" = ("function1",10)

它可以接受一个字符串,它是一个函数名称以及参数,并获得一个(函数名称,参数)元组。 我不知道如何在Haskell中进行操作。请提供一些建议。谢谢! 假设所有输入都是完美的形式,例如“ sum(6)”

1 个答案:

答案 0 :(得分:7)

为您的函数提供这种类型有点误导,因为有许多输入字符串您无法为其生成正确的输出:

getString "f1i     sh??" 

应该返回吗?因此,通常我们会以某种方式丰富输出类型以表明它可能会失败:例如

getString :: String -> Maybe (String, Int)

为此,我建议使用breakspan之类的函数来为您进行解析。像这样:

import Data.Char (isAlphaNum, isDigit)
import Text.Read (readMaybe)

getString :: String -> Maybe (String, Int)
getString s = case span isAlphaNum s of
  (f, '(':arg) -> case span isDigit arg of
    (x, ")") -> ((,) f) <$> readMaybe x
    _ -> Nothing
  _ -> Nothing