我正在尝试编写一个检索列表中第n个元素的函数.
这是我到目前为止所拥有的:
main :: IO ()
main = do print (nth 3 [1,2,10])
nth _ [] = []
nth a (x:xs)
| (a == 1) = x
| otherwise = nth (a-1) xs
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
Error occurred
ERROR line 2 - Cannot justify constraints in explicitly typed binding
*** Expression : main
*** Type : IO ()
*** Given context : ()
*** Constraints : (Show a, Num [a])
Run Code Online (Sandbox Code Playgroud)
Num [a]约束为什么?因为在[]子句中你有你的函数返回一个列表,[]并且在另一个子句中你有它返回一个列表的元素,x.这意味着它仅为其元素本身就是列表的列表定义.但你用一个列表来称呼它[1,2,10].所以Haskell看到一个数字文字,1并希望将其解释为一个也是数字的列表.它还需要它是的一个实例Show为print能够表现出来:
Prelude> :i print
print :: (Show a) => a -> IO () -- Defined in System.IO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1655 次 |
| 最近记录: |