Haskell “哈斯克尔错误”;不在范围内:数据构造函数“;
我已经回顾了关于这个错误的其他帖子,我认为我没有犯任何错误 不在范围内:数据构造函数“提取” 配置.hs:Haskell “哈斯克尔错误”;不在范围内:数据构造函数“;,haskell,Haskell,我已经回顾了关于这个错误的其他帖子,我认为我没有犯任何错误 不在范围内:数据构造函数“提取” 配置.hs: module Configuration (Config , columns , headers , types , totals , extractions, Extraction , xState , xDivisions , xOffice ...) where ... data Extraction = Extraction { xState ::
module Configuration
(Config
, columns
, headers
, types
, totals
, extractions,
Extraction
, xState
, xDivisions
, xOffice
...) where
...
data Extraction = Extraction { xState :: String
, xDivisions :: Maybe [String]
, xOffice :: Maybe String } deriving Show
data Config = Config { columns :: String
, headers :: [String]
, types :: [String]
, totals :: [String]
, extractions :: [Extraction] } deriving Show
...
PIF.hs:
module PIF (...) where
import Configuration
...
data Report = Report { division :: String
, state :: String
, office :: String
, inSection :: Bool
, content :: [String] } deriving Show
...
extract :: Config -> [Report] -> [Report]
extract c = filter f
where f Report { division=d, state=s, office=o, inSection=_, content=_ } =
map or $ map isMatch $ extractions c
where isMatch
| Extraction { xState=xS, xDivisions=Just xD, xOffice=Nothing } = s==xS && (map or $ map (==d) xD)
| Extraction { xState=xS, xDivisions=Nothing, xOffice=Just xO } = s==xS && o==xO
如果你需要更多信息,请告诉我。谢谢
这是我更正的摘录
:
extract c = filter f
where f Report { division=d, state=s, office=o, inSection=_, content=_ } =
or $ map isMatch $ extractions c
where isMatch x =
case ((xDivisions x), (xOffice x)) of (Nothing, Just y) -> s==(xState x) && o==y
(Just y, Nothing) -> s==(xState x) && (or $ map (==d) y)
将导出行
Extraction
更改为Extraction(..)
否则,您将导出类型,而不是数据构造函数。由于您的类型和构造函数共享相同的名称,因此在本例中这一点并不明显 天哪!非常感谢你!我自己永远也不会想到这一点。:)这个错误还包括我在表达式上下文中使用模式语法的事实。我将
Extraction{xState=xS…}
更改为case
语句。我还删除了或上不正确的映射<代码>或
减少列表,但它不会映射到列表上。