Haskell函数作为一种类型转换

bea*_*rdc 5 haskell types

如果我想要一个版本的reads返回列表(Int, String),我看到的例子是

f x = reads x :: [(Int,String)]
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以在无点样式(f = g . reads?)中执行此操作,或者如果这是您在Haskell中不做/不能做的事情.

我没有看到任何使用类型作为参数的例子,所以它可能不可行.

Eth*_*ynn 6

我想你要找的是f = reads :: String -> [(Int, String)].


Dan*_*Dan 6

做你所描述的惯用方法是

f :: String -> [(Int, String)]
f = reads
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,如果你有一个多态类型,结果就是你所期望的(因为Dreaded Monomorphism Restriction).