2017-09-20 6 views
0

lc使用Set.fromList、エラーを取得「プレリュードを!!:インデックスが大きすぎる」

*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> :info lc 
lc :: IO [Int] -- Defined at <interactive>:2:5 
*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> length <$> lc 
1704399 

リストは、私はこのリストのカーディナリティを知っていただきたいと思いますので、私はこのリストを変換しようとしたがあります私はカーディナリティを計算しようとしていたときに

*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> import Data.Set as Set 
*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> let sc = Set.fromList <$> lc 

は、しかし、私はエラーを得た:

*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> length <$> sc 
*** Exception: Prelude.!!: index too large 

行うことで設定します

*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> :info sc 
sc :: IO (Set Int) -- Defined at <interactive>:19:5 

と私は本当にこのException: Prelude.!!: index too large起こすかを知りたいタイプfromList :: [Int] -> Set Int

の値を計算するために使用されているときlengthがよく働くと思う:scのタイプは正しいです。このsetIOモナドにあるので、 はこれですか?

+0

['Data.Set'](http://hackage.haskell.org/package/containers-0.5.10.2/docs/Data-Set.html#size)の基数は' size'によって計算されません。 「長さ」だけ。 – Cirquit

+0

@Cirquit、 'length'も同様に動作します。 – dfeuer

答えて

5

私はあなたが間違った木を吠えていると信じています。 Data.Setlengthの定義では、直接的または間接的には決してPrelude.!!を使用しません。 fromListの定義もありません。リスト自体の定義には、ある意味で!!が含まれている必要があります。ソースを確認し、!!を使用しないでください。

関連する問題