在Haskell中,为什么编译:
splice :: String -> String -> String
splice a b = a ++ b
main = print (splice "hi" "ya")
Run Code Online (Sandbox Code Playgroud)
但这不是:
splice :: (String a) => a -> a -> a
splice a b = a ++ b
main = print (splice "hi" "ya")
>> Type constructor `String' used as a class
Run Code Online (Sandbox Code Playgroud)
我原以为这些都是一样的.有没有办法使用第二种样式,避免重复类型名称3次?
ami*_*dfv 13
=>类型中的语法适用于类型类.
当你说f :: (Something a) => a,你并不是说那a 是一个Something,你说它是一种"在一组" Something类型.
例如,Num是一种类型类,其包括这样的类型如Int和Float.但是,没有类型Num,所以我不能说
f :: Num -> Num
f x = x + 5
Run Code Online (Sandbox Code Playgroud)
但是,我可以说
f :: Int -> Int
f x = x + 5
Run Code Online (Sandbox Code Playgroud)
要么
f :: (Num a) => a -> a
f x = x + 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
470 次 |
| 最近记录: |