问候,
我有点惊讶的是,无论我是否绑定它,我都会在GHCi中获得两种不同类型的表达式。我定义了一个以用户友好格式打印Tree的函数,其中drawTree带有此
let printTree = putStrLn . drawTree . fmap show
推断类型为Show a => Tree () -> IO ()
。这不是我的预期。所以我试着直接输入printTree
的主体。实际上,这给了我预期的类型
putStrLn . drawTree . fmap show :: Show a => Tree a -> IO ()
我知道我可以使用printTree
或参数来定义$
以避免此问题。但是,我想知道为什么GHCi没有相同的类型。
有人可以解释一下这种行为吗? 谢谢