私は haskell が初めてで、型シグネチャに苦労しています。私は、単機能のコラッツ チェーン ジェネレーターに取り組んでいます。Haskell collatz の質問をいくつか見たことがありますが、私が答えようとしている種類の問題に答えているものは見たことがありません。私はGHCIを使用しています。
これが私の機能です:
collatz :: (Num a) => a -> [a]
collatz n
| n == 1 = [n]
| odd n = n : collatz (n * 3 + 1)
| even n = n : collatz (n / 2)
これは簡単なようです。新しい変換をリストに追加するだけです。ただし、インタープリターは次のエラーを表示します。
collatz.hs:9:13:
Could not deduce (Eq a) arising from a use of `=='
from the context (Num a)
....
collatz.hs:10:11:
Could not deduce (Integral a) arising from a use of `odd'
from the context (Num a)
....
collatz.hs:11:36:
Could not deduce (Fractional a) arising from a use of `/'
from the context (Num a)
コンパイラが使用するように指示する型型シグネチャのすべての組み合わせが失敗するようです
collatz :: (Eq a, Num a) => a -> [a]
collatz :: (Integral a) => a -> [a]
collatz :: (Fractional a) => a -> [a]
私は明らかに基本的な何かを欠いています。単一の関数で collatz チェーンを作成する方法を誰か教えてもらえますか?