【发布时间】:2012-04-25 03:00:23
【问题描述】:
我对@987654322@不是很熟悉,但是最近看了这个问题:What does the `forall` keyword in Haskell/GHC do?
答案之一是这个例子:
{-# LANGUAGE RankNTypes #-}
liftTup :: (forall x. x -> f x) -> (a, b) -> (f a, f b)
liftTup liftFunc (t, v) = (liftFunc t, liftFunc v)
解释很好,我明白forall 在这里做什么。但我想知道,这不是默认行为是否有特殊原因。有没有不利的时候?
编辑:我的意思是,默认情况下无法插入 forall 是否有原因?
【问题讨论】:
-
您是在问为什么默认情况下没有打开扩展程序,或者为什么
(x -> f x) -> (a,b) -> (f a, f b)不被视为与(forall x. x -> f x) -> (a, b) -> (f a, f b)相同?如果是后者,您能否指定您建议编译器决定在哪里插入foralls 的逻辑? -
后者,我不知道从哪里开始就这个主题提出任何建议!
-
请注意,
(x -> f x) -> (a, b) -> (f a, f b)类型相当无用。该函数不能将第一个参数应用于元组的任一元素,因此其结果必须是⊥或(⊥, ⊥)。