0
私はハスケルにとって非常に新しく、take
に似た関数を書こうとしました、つまり、指定された数の項目を指定されたリストから返します。私のコードは次のとおりです。リテラル '0'から生じる(Eq i)を推論できません
take' :: (Num i, Ord a) => i -> [a] -> [a]
take' 0 _ = []
take' _ [] = []
take' n (x:xs) = x : take' (n - 1) xs
しかし、私はそれをコンパイルしようとすると、私は、次のエラーが表示さ:Haskellは0を認識することはできないとして、私は、エラーが発生していると思い
Could not deduce (Eq i) arising from the literal ‘0’
from the context (Num i, Ord a)
bound by the type signature for
take' :: (Num i, Ord a) => i -> [a] -> [a]
at recursion.hs:1:10-42
Possible fix:
add (Eq i) to the context of
the type signature for take' :: (Num i, Ord a) => i -> [a] -> [a]
In the pattern: 0
In an equation for ‘take'’: take' 0 _ = []
をクラス型のNumのメンバーとして、しかし私は確信していません。誰もが私にエラーを説明し、それを修正する方法を教えてもらえますか?
あなたは 'take '::(Num a、Eq a)=> a - > [a] - > [a]'が必要です。 – Alec
@Alec:彼は 'take 'を望んでいると思う:(Num a、Eq a)=> a - > [b] - > [b]' :) –
'i'に' Eq'制約を加える必要があります: '(Num i、Eq i、Ord a)=> i - > [a] - > [a]' a'の 'Ord'制約がどういうものかはっきりしません。 – Lee