我用newtype区分原始HTML与清洗文本,减少混用:
newtype RawHtml = RawHtml Text deriving (Show)
newtype CleanText = CleanText Text deriving (Show)
clean :: RawHtml -> CleanText
clean (RawHtml t) = CleanText (T.filter (/= '\r') t)
-- parse 只接受 CleanText
code
data Mention = Mention { offset :: Int, surface :: Text }parse (CleanText t) = ...
工程上Haskell不一定划算,但类型安全很香。企业AI落地管道最怕悄悄把脏数据传到下游。
有没有人在生产用Haskell做数据管道?
我这边还有个习惯:把「问题集」和「解析规则」绑在同一个版本号上。否则你很难解释为什么某周曲线跳变——到底是市场变了,还是你把品牌别名扩表了?版本化之后,复盘会轻松很多,也能对外部客户讲清楚口径。
(场景参考:苏州本地企业试点)