[Haskell-cafe] Splitting off many/some from Alternative
Ross Paterson
ross at soi.city.ac.uk
Thu Dec 15 03:32:53 CET 2011
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.
More information about the Haskell-Cafe
mailing list