-- ------------------------------------------------------------ {- | Module : Control.Arrow.ArrowNF Copyright : Copyright (C) 2005-8 Uwe Schmidt License : MIT Maintainer : Uwe Schmidt (uwe\@fh-wedel.de) Stability : experimental Portability: non-portable Arrows for evaluation of normal form results -} -- ------------------------------------------------------------ module Control.Arrow.ArrowNF where import Control.Arrow import Control.DeepSeq -- | -- complete evaluation of an arrow result using 'Control.DeepSeq' -- -- this is sometimes useful for preventing space leaks, especially after reading -- and validation of a document, all DTD stuff is not longer in use and can be -- recycled by the GC. strictA :: (Arrow a, NFData b) => a b b strictA = arr $ \ x -> deepseq x x class (Arrow a) => ArrowNF a where rnfA :: (NFData c) => a b c -> a b c rnfA f = f >>> strictA -- ------------------------------------------------------------