您好,在编写方法时,如何为GHC
或Data.Text.read
的{{1}}运算符等函数强制使用=~
类型?
示例:
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
答案 0 :(得分:11)
现代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
答案 1 :(得分:3)
read
的类型为String -> a
,因此read x
的类型为a
。就像强制read x
键入Double
而不是a
和read x :: Double
一样,您也可以强制read
键入String -> Double
类型:>
b = map (read :: String -> Double) a