【发布时间】:2011-09-19 18:40:51
【问题描述】:
有一天在#haskell 上,有人提到了当字符串改变时字符串的类型应该如何改变的概念。这让我想起了我项目中的一些代码。它一直困扰着我,我无法解释为什么。我现在推测,原因是我没有实施这个概念。这是下面的代码,然后是一些关于如何开始改进它的想法。我想要的是一些关于“你在正确的轨道上”的效果的输入。或者,“不,很远。”,或者“这是你应该注意的另一件事。”。
> processHTML :: String -> [[String]]
> processHTML htmlFILE =
> let parsedHTML = parseTags htmlFILE
> allTagOpens = sections (~== TagOpen "a" [("href","")]) parsedHTML
> taggedTEXT = head $ map (filter isTagOpen) allTagOpens
> allHREFS = map (fromAttrib "href") taggedTEXT
> allPotentials = map (dropWhile (/= '?')) allHREFS
> removedNulls = filter (not . null) allPotentials
> removedQs = map (drop 1) removedNulls
> in map (splitOn "&") removedQs
这里的想法是我采用原始 HTML 并过滤掉所有我不想要的东西,直到我得到我想要的东西。每个 let 绑定代表过滤的一个阶段。这可能是数据结构的基础,如下所示:
> data Stage = Stage1 Foo
> | Stage2 Bar
> | Stage3 Baz
Foo Bar 和 Baz 是合适的数据类型;例如,一个字符串或 TagOpen,具体取决于我在过滤过程中所处的阶段。当我添加错误处理代码时,我可以使用这种数据类型来获取精确的信息。另外,它可以帮助我跟踪发生的事情。
感谢您的反馈。
【问题讨论】:
-
你为什么要努力改变类型?另外,你能描述一下
processHTML应该做什么吗? -
嗯,我想我解释了为什么我想改变类型。我认为这将帮助我在错误处理期间获得更精确的信息(尚未实现)。另外,虽然我是写这篇文章的人,但我必须在 ghci 中运行这些 let 绑定以查看发生了什么。我想我可以使用类型向自己传达更多信息。
-
ProcessHTML 正在从通过屏幕抓取生成的 HTML 中捕获我需要的数据,方法是删除我不需要的所有内容,直到我只剩下我想要的东西。