Hi Wolfgang,
On Mon, Mar 12, 2012 at 9:39 AM, Wolfgang Lux <wlux_at_uni-muenster.de> wrote:
> An interesting idea -- but a values function with weak encapsulation will not work as you expected. The result of values (0 ? 1) would be {0} ? {1} rather than {0,1}.
I agree that defining 'values' using the weak encapsulating 'findall'
in MCC like this
values x = findall (\y -> x =:= y)
will behave as you described. But wouldn't it be possible to add a
*primitive* operation 'values' such that
values (0?1) = {0,1}
but
let x = 0?1 in values x = {0} ? {1}
?
> PS I was surprised (should I say astonished) about the interface of PAKCS' SetFunctions module. It is apparently using strong encapsulation for a pure function: set0 :: a -> Values a (and I would assume the other setN function are using strong encapsulation for their first argument as well). That means that code using these function is susceptible to the known problems of strong encapsulation with evaluation order.
The 'Values' type is deliberately abstract and does not allow to
observe the order of results. Other problems of strong encapsulation
are avoided by the restricted form of encapsulation that set functions
provide, as far as I can tell.
Or can you give an example, where evaluation order determines the
result of a program using set functions (as implemented in PAKCS)?
Cheers,
Sebastian
_______________________________________________
curry mailing list
curry_at_lists.RWTH-Aachen.DE
http://MailMan.RWTH-Aachen.DE/mailman/listinfo/curry
Received on Mo Mär 12 2012 - 11:48:07 CET