有一个清单 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
Run Code Online (Sandbox Code Playgroud)
我想知道这个列表的基数,所以我尝试通过执行以下操作将此列表转换为集合:
*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> import Data.Set as Set
*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> let sc = Set.fromList <$> lc
Run Code Online (Sandbox Code Playgroud)
但是,当我试图计算基数时,我得到了错误:
*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> length <$> sc
*** Exception: Prelude.!!: index too large
Run Code Online (Sandbox Code Playgroud)
类型sc是正确的:
*Main Lib MetaDefinition WHparseCSV WHparseTxT Set> :info sc
sc :: IO (Set Int) -- Defined at <interactive>:19:5
Run Code Online (Sandbox Code Playgroud)
我认为length用于计算类型的值时效果很好fromList :: [Int] -> Set Int
我真的很想知道是什么原因造成的Exception: Prelude.!!: index too large.这set是因为这是在IOmonad?
我相信你正在咆哮着错误的树.lengthfor 的定义Data.Set不Prelude.!!以任何方式直接或间接使用.也没有定义fromList.我相信列表本身的定义必须!!以某种方式涉及.检查您的来源,不要使用!!.