数据声明Haskell中的类型约束

阿维·卡斯佩(Avi Caspe)

我正在使用Haskell并尝试编写以下内容:

data Scale s = Scale s s

但是,我要使它s必须是Num类型类的东西,例如Int或Double。使用Haskell和GHC可以做到吗?

丹尼尔·瓦格纳

是:

{-# LANGUAGE GADTs #-}
data Scale s where
    Scale :: Num s => s -> s -> Scale s

但是,通常认为最佳做法是这样做。相反,把Num约束只在函数使用ScaleS和需要Num约束。放宽对此类约束的限制,使您可以在适当的时候暂时打破不变式。例如,通常希望为Functor这种类型实例创建实例,如果您如上所述约束构造函数,则这是不可能的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章