封闭式家庭不能按预期工作

时间:2013-10-13 21:09:41

标签: haskell type-families

几个小时前,我建造了GHC HEAD来试验新的闪亮封闭式家庭。

{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleInstances #-}

type family C a b where
  C  a [a] = [a]
  C  a  a  = [a]

现在我尝试使用C

class Combine a b where
  combine :: a -> b -> C a b

instance Combine a [a] where
  combine a b = a : b

instance Combine a a where
  combine a b = [a, b]

导致此错误:

Couldn't match expected type ‛C a a’ with actual type ‛[a]’
...
In the expression: [a, b]
In an equation for ‛combine’: combine a b = [a, b]
In the instance declaration for ‛Combine a a’

在我看来,第二个等式分开与第一个等式[a] a不能简化为a a,无论a ),为什么不编译?

1 个答案:

答案 0 :(得分:7)

我仔细查看了邮件档案。不幸的是,似乎a ~ b并未排除a ~ [b]的可能性,因为接受了这种废话:

type family G = [G]

因此,在实例Combine a a中,当我们调用C a a以找出返回类型应该是什么时,不可能减少:因为我们对{{1}一无所知}},我们还不知道是否选择a类型系列的C a aC a [a]分支,我们还无法进行任何缩减。

this mailing list thread中有更多细节,在下个月的by-thread archive中有很多后续内容(似乎很难从上一个链接中找到)。对我来说,整个情况实际上似乎有点奇怪,虽然我不确定什么是更好的解决方案。