On Thu, Dec 15, 2011 at 02:19:34AM +0000, Gregory Crosswhite wrote: > On Dec 15, 2011, at 12:03 PM, Ross Paterson wrote: > > The current definition says that some and many should be the least > solutions of the equations > > some v = (:) <$> v <*> many v > many v = some v <|> pure [] > > We could relax that to just requiring that they satisfy these equations > (which I think is what John wants). In that case there would be another > possible definition for Maybe: > > some Nothing = Nothing > some (Just x) = Just (repeat x) > > many Nothing = Just [] > many (Just x) = Just (repeat x) > > That is a really good idea! In fact, this behavior was exactly what my > intuition had at first suggested to me that these methods should do. > > But the part that still confuses me is: why are these not considered the > "least" solutions of the equations?
It has to do with the termination partial ordering -- the least solutions give a denotational description that's equivalent to what recursion computes. In this case, the least solutions are some Nothing = Nothing some (Just x) = _|_ many Nothing = Just [] many (Just x) = _|_ It's easy to verify that these are solutions, and that they're less defined than the versions above. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe