我有一个类Cyc c r,它具有表单c m r的数据函数,其中m是一个幻影类型。就本例而言,主要原因是它减少了函数的约束数。在我的实际示例中,对这个接口的一个更迫切的需求是,我处理更改的和隐藏的幻影类型,因此这个接口允许我获得任何幻影类型的Cyc约束。现在,当我有一个接受泛型Cyc并需要Num (c m r)约束的函数时,我可以编写:
foo :: (Cyc c r, Foo m) => c
我试图设计一个数据结构,在欧几里得平面上保存/表示一个分段的圆形轨迹。该轨迹受约束为连续的,且具有有限的曲率,因此圆弧与切向相交。存储所有圆中心、半径和接触点将允许检查O(1)中任何地方的几何,但由于数据冗余,需要明确执行连续性和曲率约束。在我看来,这会使代码变得混乱。只将圆接触点(沿曲线上的路径点)与曲线的初始方向一起存储,原则上就足够了,避免了数据冗余,但需要进行O( n )计算来检查弧n的几何形状,因为该弧线取决于轨迹中的所有弧。我想避免数据冗余