Sop*_*hie 1 haskell existential-type gadt
我有一个容器类型,叫做X.由于我想要异构列表X,因此它的构造函数是存在于某个类型变量上的类型a.但是,我希望它是Eq类型类的一个实例.一个hackish解决方案看起来像这样:
{-# LANGUAGE GADTs #-}
data X where X :: (Eq a, Show a) => a -> X
instance Eq X where
X x == X y = show x == show y
Run Code Online (Sandbox Code Playgroud)
这个问题最简单(干净)的解决方案是什么?
(X如果它们的类型不同,则不相等.)
添加,Typeable以便您拥有该类型的运行时表示; 然后使用cast将其中一个转换为适当的类型.
{-# LANGUAGE GADTs #-}
import Data.Typeable
data X where X :: (Eq a, Typeable a) => a -> X
instance Eq X where
X x == X y = Just x == cast y
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |