我正在尝试使用可能包含以下类型元素的无限列表:
IO (Either Throwable a)
- 我只对使用 type 的元素感兴趣
Right
。 - 列表已排序。
Right
元素总是在前,然后是Left
元素
问题是我使用的实现是错误的,因为函数sequence
评估无限列表,所以函数永远不会结束。
takeWhileRight :: [IO (Either Throwable a)] -> IO [(Either Throwable a)]
takeWhileRight list = do
unwrappedList <- sequence $ list -- BANG!!
return $ takeWhile isRight $ unwrappedList
isRight :: (Either Throwable a) -> Bool
isRight x = case x of
Right x -> true
Left x -> false
关于如何正确使用该列表的任何想法?