Haskell或特定编译器是否具有类型级lambda(如果这甚至是一个术语)?
详细说,我说有一个参数化类型,Foo a b并希望Foo _ b成为一个实例,比如Functor.是否有任何机制可以让我做类似的事情
instance Functor (\a -> Foo a b) where
...
Run Code Online (Sandbox Code Playgroud)
?
C. *_*ann 25
虽然sclv回答了你的直接问题,但我会补充一点,"类型级lambda"的含义不止一个.Haskell有各种类型的运算符,但没有一个真正表现为正确的lambdas:
A和类型构造函数F,函数应用程序F A也是一个类型,但不包含" F应用于此"的其他(类型级别)信息A.a -> b -> a隐式的类型forall a b. a -> b -> a.在forall其范围内结合的类型变量,从而表现有点像的λ.如果记忆为我服务,这大致是系统F中的"资本lambda".其他扩展放松了一些提到的限制,或提供部分解决方法(另请参阅:Oleg的类型hackery).然而,几乎你不能以任何方式做任何事情的一件事正是你所要求的,即引入一个带有匿名函数抽象的新绑定范围.
scl*_*clv 18
来自TypeCompose:
newtype Flip (~>) b a = Flip { unFlip :: a ~> b }
Run Code Online (Sandbox Code Playgroud)
http://hackage.haskell.org/packages/archive/TypeCompose/0.6.3/doc/html/Control-Compose.html#t:Flip
另外,如果某个东西是两个参数中的Functor,你可以把它变成一个bifunctor:
http://hackage.haskell.org/packages/archive/category-extras/0.44.4/doc/html/Control-Bifunctor.html
(或者,在后来的类别中,一个更通用的版本:http://hackage.haskell.org/packages/archive/category-extras/0.53.5/doc/html/Control-Functor.html#t : Bifunctor)
我不喜欢回答我的问题的想法,但显然,根据几个人就Freenode上#haskell,Haskell没有类型级lambda表达式.
EHC(也许还有其继承者,UHC)具有类型级别的lambda,但它们没有文档记录,也没有依赖类型语言那么强大.我建议您使用依赖类型的语言,例如Agda(类似于Haskell)或Coq(不同,但仍然是纯函数的核心,可以懒惰或严格解释和编译!)但我偏向于这些语言,这可能是你要求的100倍矫枉过正!