有一个列表 lc
*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
sc
的类型是正确的:
*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> :info sc
sc :: IO (Set Int) -- Defined at <interactive>:19:5
我认为length
用于计算fromList :: [Int] -> Set Int
我真的想知道是什么原因导致 Exception: Prelude.!!: index too large
。这是因为此set
在IO
Monad中?
我相信您正在吠叫错误的树。Data.Set
的length
的定义不会直接或间接使用Prelude.!!
。fromList
的定义也不是。我相信列表本身的定义必须以某种方式涉及!!
。检查您的来源,并且不要使用!!
。