Haskell 在计算表达式类型时,是否可以指示ghci对约束使用具体类型?
我可以使用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)的类型签名特别方便。最
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
了解类型级参数的顺序。