Haskell中缀函数是否有类型表达式?查询方法解惑
关于Haskell中
++的类型查询问题 你说得没错,++本质上就是一个函数,但它是中缀函数,这就是直接输入:t ++会报错的原因——GHCi没法识别单独的中缀运算符作为查询对象。下面给你两种实用的解决方法:
最直接的方式:转成前缀形式查询
只要把++用括号整个包起来,它就变成了前缀形式的函数,这时候就能正常用:t查询类型了::t (++) -- 输出:(++) :: [a] -> [a] -> [a]这是Haskell的通用规则:所有中缀运算符都可以通过加括号转换成前缀形式使用;反过来,前缀函数也能用反引号
`包起来当成中缀用(比如1mod2等价于mod 1 2)。用占位符模拟使用场景查询
如果你想保留中缀写法来查询,也可以给它提供参数占位符,比如::t \x y -> x ++ y -- 同样会得到和上面一致的类型结果或者直接传一个参数,查看部分应用后的类型:
:t (++) [1,2] -- 输出:(++) [1,2] :: Num a => [a] -> [a]
另外你问++有没有专门的前缀名称?答案是没有,它的前缀形式就是(++)本身——不像有些运算符(比如$)有对应的命名函数,但用括号包裹就完全能满足前缀使用和类型查询的需求了。
内容的提问来源于stack exchange,提问作者Justin Thong
相关产品推荐
相关产品推荐

