使用Haskell在列表中查找第n个元素

Str*_*ger 0 haskell

我正在尝试编写一个检索列表中第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)

Wil*_*ess 5

Num [a]约束为什么?因为在[]子句中你有你的函数返回一个列表,[]并且在另一个子句中你有它返回一个列表的元素,x.这意味着它仅为其元素本身就是列表的列表定义.但你用一个列表来称呼它[1,2,10].所以Haskell看到一个数字文字,1并希望将其解释为一个也是数字的列表.它还需要它是的一个实例Showprint能够表现出来:

Prelude> :i print
print :: (Show a) => a -> IO ()         -- Defined in System.IO
Run Code Online (Sandbox Code Playgroud)