约束追踪技术
这是一种情况:我已经编写了一些带有类型签名的代码,GHC抱怨无法为x x和y推导某些代码y。通常,您可以将GHC扔掉,然后将同构添加到功能约束中,但这是一个坏主意,原因有以下几个: 它不强调理解代码。 您最终可以得到5个约束,而其中一个约束就足够了(例如,如果5个约束被一个更具体的约束隐含) 如果您做错了某事或GHC无助,您可能会受到虚假约束的限制 我只花了几个小时与案例3进行斗争。我正在玩syntactic-2.0,并且试图定义一个与域无关的版本share,类似于中定义的版本NanoFeldspar.hs。 我有这个: {-# LANGUAGE GADTs, FlexibleContexts, TypeOperators #-} import Data.Syntactic -- Based on NanoFeldspar.hs data Let a where Let :: Let (a :-> (a -> b) :-> Full b) share :: (Let :<: sup, Domain a ~ sup, Domain b ~ sup, SyntacticN (a -> …