我正在使用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
约束只在函数使用Scale
S和需要的Num
约束。放宽对此类约束的限制,使您可以在适当的时候暂时打破不变式。例如,通常希望为Functor
这种类型的实例创建实例,如果您如上所述约束构造函数,则这是不可能的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句