Haskell 在计算表达式类型时,是否可以指示ghci对约束使用具体类型?

Haskell 在计算表达式类型时,是否可以指示ghci对约束使用具体类型?,haskell,types,signature,ghci,Haskell,Types,Signature,Ghci,我可以使用ghci评估fmap的类型: Prelude> :t fmap fmap :: Functor f => (a -> b) -> f a -> f b 是否有一种方法可以指示ghci将f绑定到Functor的特定实例,并打印出生成的类型签名。例如,对于[],它将打印 (a -> b) -> [a] -> [b] 如果没有,有没有什么技巧或迂回的方法来达到同样的效果?这对于派生更复杂的表达式和函子(例如,(>)a)的类型签名特别方便。最

我可以使用ghci评估
fmap的类型

Prelude> :t fmap
fmap :: Functor f => (a -> b) -> f a -> f b
是否有一种方法可以指示ghci将
f
绑定到
Functor
的特定实例,并打印出生成的类型签名。例如,对于
[]
,它将打印

(a -> b) -> [a] -> [b]
如果没有,有没有什么技巧或迂回的方法来达到同样的效果?这对于派生更复杂的表达式和函子(例如,
(>)a
)的类型签名特别方便。

最简单的方法是

Prelude> :set -XTypeApplications 
Prelude> :t fmap @[]
fmap @[] :: (a -> b) -> [a] -> [b]
最简单的方法是

Prelude> :set -XTypeApplications 
Prelude> :t fmap @[]
fmap @[] :: (a -> b) -> [a] -> [b]

要修复其他参数而不修复第一个参数,可以使用下划线,如
fmap@@Int::Functor f=>(Int->b)->f Int->f b
。使用
:set-fprint explicit foralls
:type+v
来了解类型级参数的顺序。要修复其他参数而不修复第一个参数,可以使用下划线,如
fmap@@Int::Functor f=>(Int->b)->f Int->f b
。使用
:set-fprint explicit foralls
:type+v
了解类型级参数的顺序。