最佳答案
我最近发布了一个关于语法- 2.0关于share
定义的问题。我已经在GHC 7.6中工作了:
{-# LANGUAGE GADTs, TypeOperators, FlexibleContexts #-}
import Data.Syntactic
import Data.Syntactic.Sugar.BindingT
data Let a where
Let :: Let (a :-> (a -> b) :-> Full b)
share :: (Let :<: sup,
sup ~ Domain b, sup ~ Domain a,
Syntactic a, Syntactic b,
Syntactic (a -> b),
SyntacticN (a -> (a -> b) -> b)
fi)
=> a -> (a -> b) -> b
share = sugarSym Let
然而,GHC 7.8希望-XAllowAmbiguousTypes
使用该签名进行编译。或者,我可以用
(ASTF sup (Internal a) -> AST sup ((Internal a) :-> Full (Internal b)) -> ASTF sup (Internal b))
它是SyntacticN
上的fundep所暗示的类型。这让我避免了扩展。当然这是
我的问题是:
-XAllowAmbiguousTypes
的可接受的用法吗?sugarSym :: (sub :<: AST sup, ApplySym sig fi sup, SyntacticN f fi)
=> sub sig -> f
sugarSym = sugarN . appSym
在我看来,fi
(可能还有sup
)在这里应该是模棱两可的,但它在编译时没有扩展名。为什么sugarSym
是明确的,而share
是?由于share
是sugarSym
的一个应用,所以share
约束都直接来自sugarSym