gpt4 book ai didi

haskell - 如何组合Haskell图表包中的 `annularWedge`和 `wedge`?

转载 作者:行者123 更新时间:2023-12-02 18:53:19 24 4
gpt4 key购买 nike

事实证明annularWedge graphs 包的函数不能将半径 0 用作内半径。您必须改用wedge

对我来说,内半径 0 只是 annularWedge 的退化情况,并且应该表现得像 wedge,所以我尝试将它们结合起来:

mywedge r2 r1 d a
| r1 == 0 = wedge r2 d a
| otherwise = annularWedge r2 r1 d a

当然,它不起作用,我无法弄清楚该错误意味着什么:

Non type-variable argument in the constraint: RealFloat (N t)
(Use FlexibleContexts to permit this)
When checking that ‘mywedge’ has the inferred type
mywedge :: forall t.
(RealFloat (N t), TrailLike t, V t ~ V2) =>
N t -> N t -> Direction V2 (N t) -> Angle (N t) -> t

事实上,事实证明 annularWedgewedge 具有不同的约束,这让我感到惊讶:

annularWedge :: (TrailLike t, V t ~ V2, N t ~ n, RealFloat n) => n -> n -> Direction V2 n -> Angle n -> t

wedge :: (InSpace V2 n t, OrderedField n, TrailLike t) => n -> Direction V2 n -> Angle n -> t

那么如何将这两个函数组合成一个接受内半径 0 并执行正确操作的正常函数呢?

最佳答案

解决办法很简单。正如 ErikR 所说,添加 {-# LANGUAGE FlexibleContexts, TypeFamilies #-}到文件的顶部。需要明确的是,这些都是可以安全添加的扩展(某些扩展,例如重叠实例或不可判定的实例,应该让您在启用它们之前暂停,但这些扩展是 mostly 安全的)

尽管不明显,wedge签名的约束严格弱于 annularWedge s。

如果您好奇为什么签名看起来如此不同,请继续阅读...

对于初学者来说,一旦你追踪到这些限制,它们并没有那么不同。让我们从 wedge 开始.

(InSpace V2 n t, OrderedField n, TrailLike t)

查看 InSpace 的定义,你看到它没有任何功能,它本质上就像一个同义词:(V a ~ v, N a ~ n, Additive v, Num n) => InSpace v n a 。然后,我们可以展开InSpace V2 n t(V t ~ V2, N t ~ n, Additive V2, Num n) 。同样, OrderedField 事实证明只是 (Floating n, Ord n) 的简写。现在,wedge 的约束看起来像

(TrailLike t, V t ~ V2, N t ~ n, Additive V2, Num n, Floating n, Ord n)

然而,事实证明我们甚至可以删除 Additive V2约束,因为该实例已定义 where Additive is defined in Linear.Vector Num n是多余的,因为 Num n => Fractional n => Floating n 。这给我们留下了更简单的约束 wedge

(TrailLike t, V t ~ V2, N t ~ n, Floating n, Ord n)

这看起来很像 annularWedge 的约束。其实唯一的区别就是wedge约束(Floating n, Ord n)annularWedge相比约束RealFloat n 。此时,约束足够相似,值得查看 wedge 的代码。 。事实证明wedge利用_theta ,定义于 HasTheta corresponding V2 instance使用反正切函数(您可以在追踪更多依赖项后得到该函数)。

关于haskell - 如何组合Haskell图表包中的 `annularWedge`和 `wedge`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38836730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com