我目前的结构如下:
class F a where
f :: ...
default f :: (G a...) => ...
f = (some definition in terms of g)
class F a => G a where
g :: ...
default g :: (C a...) => ...
g = (some definition in terms of f)
希望有点简单的英语,我总是可以用f
写g
。我有时可以用g
写f
,即当a
满足C
约束时。{/ p>
我在这里看到的问题是,如果某人写道,例如T
类型满足C T
instance F T
instance G T
这将在运行时编译和循环。虽然两个默认定义都是正确的,但重要的是至少定义了一个。
如果MINIMAL
和f
属于同一个类,我可以使用g
编译指示解决此问题,但在这种情况下它们不是。
同时将f
和g
放在同一个类中似乎不可能,因为f
的每个定义都有g
的定义,g
的每个定义都没有f
的定义。一种可能性是将g
移至F
,但也对其C a
约束,但这将阻止我使用任何{{的非默认定义来定义g
1}}不满足a
。
有没有办法重组这个来解决我面临的这种困境?
答案 0 :(得分:0)
我之前的回答是无稽之谈,所以相反,这是一个(希望)更好的答案。这至少会在编译时给你一个警告。如果两个f'
都包含g
和G
的实例,则可以在课程a
中实施F
或G
,但仅限{{1}如果f
的实例是不可能的。
G