私は Haskell を学んでいます。次のような関数があります。
takeN :: Integral a => a -> [a]
takeN n = take n [x | x<-[0..]]
私がこれをやりたいのは、無限のリストでn個の要素を返すことだけですが、なぜこれが機能しないのかわかりません。バインディングを放棄せずに修正する方法の説明 (?)
これが機能しない理由take
は、タイプがInt -> [a] -> [a]
. 番号は である必要がありInt
、任意であってはなりませんIntegral
。
次の方法で問題に対処できますfromIntegral
。
takeN :: Integral a => a -> [a]
takeN n = take (fromIntegral n) [x | x<-[0..]]
独自の関数を作成しなくても実行できます: input>> take 3 [1..] output>> [1,2,3]