模式同义词派生读?

时间:2018-06-07 09:48:39

标签: haskell pattern-synonyms

模式同义词提供表达值的简写方式;他们也可以提供一个抽象名称,以避免客户端模块侵入数据decl。这是一个不太有用的,作为讨论的例子:

data MyNum = MkNum Int

pattern Zero :: MyNum
pattern Zero = MkNum 0

我可以做些什么来帮助数据捕获为Read提供MyNum个实例。如何为Read获取Zero个实例? (Zero是伪数据构造函数,不是类型构造函数,因此该问题导致类别错误。)

我能想到的就是避免deriving (Read, ...) MyNum然后手工制作

instance Read MyNum where
  ... parse "MkNum ..."
  ... parse "Zero"

对于解析,Zero应该只是MyNum的另一个构造函数。它可以衍生出来 - 或者可以吗?

我认为任何先进的派生机制都不会对此有所帮助。因为类型是MyNum并且是唯一关联的构造函数,即MkNum

我可以提供一个函数readZero :: String -> MyNum。但我无法重载read,因此我无法将Zero嵌入到我正在阅读的长字符串文字中以构建数据结构。

有什么想法吗?

0 个答案:

没有答案