你好,我想知道有没有一种实现foreach (id in myIdList)
{
firstname_user = GetFirstNameByQuery("SELECT firstname FROM users WHERE id = " + id);
myStringList.Add(firstname_user);
}
的{{1}}可以在不分解所有类型的情况下对字段施加约束?(或者简单地在不枚举所有其他字段的情况下放置)在实例声明中?)
示例:
type
在最后一行上面看,有什么方法可以仅枚举我们要施加约束的字段? (在我们的示例中,typeclass
实现了data A=A | BB | CCC deriving( Show)
class T a where
mymethod::a->Bool
instance T A where
mymethod a = length . show $ a >1
data Complex b = Complex{
a::Int,
b::A,
c::String
}
instance (T b) => T (Complex a b c)
类型类)。
我们可以放b
或其他什么东西不放所有字段吗?
例如:
T
甚至更好
wildcards
答案 0 :(得分:3)
在为mymethod
修复了A
的实现之后(需要在>
的第一个参数周围加上括号),以下对我有用:
data Complex = Complex{
a::Int,
b::A,
c::String
}
instance T Complex where
mymethod c = mymethod (b c)
我已将Complex
的类型参数删除了-我怀疑您感到困惑,并认为当{n}出现时,名为b
的类型与名为b
的字段之间存在联系没错如果需要,可以使该连接明确(在这里,我将使用不同的名称来强调连接的方式,但是您可以在下面放置Ty
和Field
并保持有效代码):
data Complex aTy bTy cTy = Complex
{ aField :: aTy
, bField :: bTy
, cField :: cTy
}
instance T bTy => T (Complex aTy bTy cTy) where
mymethod val = mymethod (bField val)