如果我想要一个返回reads
列表的(Int, String)
版本,我看到的示例是
f x = reads x :: [(Int,String)]
我想知道是否有一种方法可以在无点样式(f = g . reads
?)中执行此操作,或者如果这是您在Haskell中不做/不能做的事情。
我没有看到任何使用类型作为参数的例子,所以它可能不可行。
答案 0 :(得分:6)
我认为你要找的是f = reads :: String -> [(Int, String)]
。
答案 1 :(得分:6)
执行您所描述的内容的惯用方法是
f :: String -> [(Int, String)]
f = reads
这样做的好处是,如果你有一个多态类型,结果是你所期望的(因为可怕的单态限制)。
答案 2 :(得分:3)
目前无法使用,但我建议使用语言扩展程序SignatureSections
,这样您就可以编写f = (:: [(Int, String)]) . reads
。
答案 3 :(得分:0)
是的,确实存在。
fixIS :: [(Int,String)] -> [(Int,String)]
fixIS = id
当我想解决多态时,我通常会有几个函数(即当我想将Netwire线的抑制monoid修复为()
时,或者我想修复{{1}时到Num a
)。显然,如果你只需要那一次就没有意义。您可能希望这样做的原因是它偶尔会在函数定义中更好地流动。根据你的haskell编译器的智能程度,它可能效率较低(理论上,Int
在大多数情况下都可以被删除...不确定如果id
给另一个{GH},GHC是否会主动寻找虽然名字。)