我有去一個數據類型: BinHeap a = [BinTree a]
BinTree a = Node a i (BinHeap a)
我想要的功能要經過一個二叉樹和給我一個最小。 extractMin :: BinHeap a -> a
extractMin ps
= foldl1 (\(Node x y z) (Node x' y' z') -> Node (smaller x x
Foldable是Traversable的超類,與Functor是Applicative和Monad的超類相似。 到Monad,它是可能的情況類似,基本實現fmap作爲 liftM :: Monad m => (a->b) -> m a -> m b
liftM f q = return . f =<< q
我們也可以使用Monoid m => (,) m單子效仿foldMap作爲 fold
假設我想將列表中的所有元素加起來,但不包括第一個負數,並返回數字和列表的其餘部分。最簡單的方法做,這是
addPos l = s `seq` (s,back)
where
(front, back) = span (>= 0) l
s = sum front
其中seq應確保沒有人意外通過強制和前背部建立一個巨大的thunk。 但是,我很好奇GHC是否足夠聰明