
On 2006-07-20 at 18:31BST I wrote:
On 2006-07-13 at 10:16BST I wrote:
Hooray! I've been waiting to ask "Why aren't we asking what laws hold for these operations?"
Having thought about this for a bit, I've come up with the below. This is intended to give the general idea -- it's not polished code,
And already some changes (but all to comments) I'd appreciate comments on the law below. --- lib/split.lhs 2006/07/21 08:54:28 1.1 +++ lib/split.lhs 2006/07/21 09:42:49 @@ -17,10 +17,17 @@ => "A Random List Of Words\nOn Lines" + I think the relevant law is + (forall x. all (not . p) (map f x)) => + segmentsSatisfying (not . p) . fromParts . mapRight f . parts p + == segmentsSatisfying (not . p) + + In other words, if f doesn't add any "not . p" elements, + the segments satisfying "not . p" are unchanged.
contiguousParts p l = [a | Right a <- parts p l]
- so words = contiguousParts Char.isAlphaNum + so words = contiguousParts (not . Char.isSpace)
segmentsSatisfying predicate = concat . map dropSeps . parts predicate
-- Jón Fairbairn Jon.Fairbairn at cl.cam.ac.uk