正则表达式导入失败

3
我将尝试将我的Java程序翻译成Haskell,我的目标是将字符串分割成几个字符串并将这些字符串放入一个列表中。
以下是我迄今为止的代码:
import Char
import IO
import Text.Regex

translate :: String -> Int
translate input = 
    testcode(splitRegex (mkRegex "\\s") input)

testcode根据第一个值的不同进行一些测试,例如(这是即兴编写的,并未实际执行)

testcode :: [String] -> Int -> Int
testcode [] 0
testcode (x:xs)  n
     |(x=="test") = 1
     |otherwise = testcode xs

我经常遇到的编译错误如下:

Could not find module `Text.Regex'
Perhaps you meant Text.Read (from base)

我该如何导入Text.Regex模块?


要通过空格拆分字符串,您可以使用 Prelude 中的 words - hammar
2个回答

8

我还没有做过这个,不确定如何在Haskell中安装外部包。我正在使用http://www.haskell.org/ghc/在win7上,如果有帮助的话。 - user1634254
尝试按照我在答案中写的那样使用Cabal进行安装。然后导入应该可以正常工作。 - Sven Koschnicke
在Windows下,使用命令行窗口输入cabal install ...命令。 - Sven Koschnicke
我不知道在哪里编写代码,它一直报错说超出了范围。 - user1634254
1
@user1634254 我建议安装Haskell平台 - http://www.haskell.org/platform/contents.html; 这可能比使用cabal手动安装所有必需的软件包更容易。 - Frank Schmitt

2
首先,打开命令行窗口并输入cabal install regex-compat。这将使您可以import Text.Regex
其次,如果再次遇到此类情况,请进行hayoo搜索库(全面但没有筛选)或hoogle搜索函数(不是全面的,但甚至可以搜索函数的类型)。这样你就可以找出它在哪个包中,然后安装它。
第三,也许更重要的是,我建议在Haskell中有很好且强大的方法可以做到一些事情,因此您不应该经常使用正则表达式。下面是一些示例:
words :: String -> [String]
words "Why not use some handy Haskell functions?" 
     = ["Why","not","use","some","handy","Haskell","functions"]

我认为words可以实现你所说的目标。你可以使用许多优秀的列表处理函数来替换一些简单的正则表达式操作,例如混合。

dropWhile :: (a -> Bool) -> [a] -> [a]
dropWhile (/=',') "Haskell is great, I love it."
     = ", I love it."

并且
import Data.Char      -- (at the top of your code)
takeWhile :: (a -> Bool) -> [a] -> [a]
takeWhile isAlpha "Well then"
     = "Well"

使用foldrscanr可以以简洁的方式表达您想要的内容。
通常情况下,列表处理函数就足够了。但是如果您需要处理更复杂的解析任务,那么出色的parsec库非常有用。使用它可以轻松编写完整的解析器。认识它,因为一旦你认识它,你会想使用它而不是其他任何东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接