haskell - 使用无点表示法时如何强制类型

标签 haskell pointfree

您好如何执行GHC函数类型,例如 Data.Text.read=~来自 Text.Regex.Posix 的运算符编写方法时?

例子:a=["1.22","3.33","5.55"]
没有免费点:b= map (\x-> read x ::Double) a
如何强制 read 的类型用无点符号?
b=map read::Double a或者
b= map (read . f1 .f2 .f3... . fn )::Double a (在编写方法时)其中 f1 , f2 ...fn是方法

或者更好的是如何指定 read属于方法链时的类型,但是 不在链的末端! :
b=map (f2 . read . f1 ) a

最佳答案

现代 Haskell 中最好的方法是使用 type application .

Prelude> :set -XTypeApplications 
Prelude> map (read @Double) ["1.22","3.33","5.55"]
[1.22,3.33,5.55]
Prelude> map (read @Int) ["1.22","3.33","5.55"]
[*** Exception: Prelude.read: no parse

这是因为 read有签名
read :: ∀ a . Read a => String -> a

因此read @Double专业 a ~ Double因此
read @Double :: String -> Double

关于haskell - 使用无点表示法时如何强制类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52275817/

相关文章:

javascript - Pointfree 在 Ramda 中通过对象中的键将数组连接到字符串

比较 Haskell 和 C 计算素数的速度

memory - 为什么包装 Data.Binary.Put monad 会造成内存泄漏?

haskell - 在输出 L 形矩阵时避免双重遍历

javascript - 使用 apply 或 call 创建一个 pointfree 函数?

haskell - 函数组合及其表示

haskell - 我无法让基于 GADT 的玩具动态类型与参数类型一起使用

unix - 杀死一个 Haskell 二进制文件

scala - 思考 Elm 中所见模式的名称以及是否有其他类似情况

haskell - Haskell中函数组合的困惑