2013-11-20 12 views
-1

我有一个问题,我需要根据数据的类型做工作,但输入可能是通用的“超类型”(不知道这是否是正确的哈斯克尔术语) 。Haskell中的类型测试不起作用

delagator :: Shape -> ShapeMap -> Integer 
delagator inShape inDataMap 
    | Circle inDataMap = do 
     -- do stuff 
     0 -- dummy return value 
    | Square inDataMap = do 
     -- do stuff 
     0 -- dummy return value 
    | otherwise = do 
     -- do stuff 
     0 -- dummy return value 

---其他信息

type ShapeMap = H.Map String ShapeData 

data Shape = Circle CircleName | Square SquareName | Triangle TriangleName deriving (Eq, Ord, Show) 

错误:Not in scope: data constructor 'OpExpr'

的数据构造在此代码成功使用之前,我在此功能中写道:此错误是令人困惑的。

+0

你可以添加'Shape'和'ShapeMap'的定义是什么? –

回答

2

你不正确的模式匹配函数参数。 警卫表情应该有Bool类型。 我想你的意思是:

delagator :: Shape -> ShapeMap -> Integer 
delagator (Circle name) inDataMap = 0 
delegator (Square name) inDataMap = 0 
delegator _    inDataMap = 0 

我认为你需要阅读this page