> You seem to want to use '>>' to convert functions from
> T to Union(T, "failed") into functions from
> Union(T, "failed") to Union(T, "failed").
No, it doesn't create new functions, just "combine" them.
Say we want to apply a series of functions, first f, then g:
x:INT, f:INT->INT, g:INT->INT
The result of f(x) can go directly into g: g(f(x))
x:List INT (or Maybe INT), f:INT->INT, g:INT->INT
We can use map: map(g, (map(f, x))
x:Maybe INT, f:INT->Maybe INT, g:INT->Maybe INT
Now we can't use map, or we have to manually check
for failure at every call, or we can use >>:
x >> f >> g
> Actually Spad compiler need some explicit or
> implicit import to use a type. Interpeter has a bunch
> of hardcoded rules, go beyond them and it can not
> fand Spad compiler knows that coercion in third line is legit,
because we excluded the other possibility in line 2.ind type. So
there is good chance that you will have
> to explicitely import your packages/domains for all
> involved T-s.
I just checked, for the same type (A->Maybe A), there's
no problem. But for more than 2 types: (A->Maybe B, B->Maybe C),
you have to explicitly import from MonadPackage in Spad,
and explicitly construct typed anonymous function wrapper
in interpreter.
> and Spad compiler knows that coercion in third line is legit,
> because we excluded the other possibility in line 2.
> .... but then you loose static checking:
This is the advantage of Maybe: in your example, there's
no point doing such things, just return the Maybe type:
ru := retractIfCan(x)@Maybe(T)
The following code that deals with ru should handle Maybe(T).
Say the following lines that handle ru is function "g" (the continuation).
In your example, it is:
ru := retractIfCan(x)@Union(T, "failed")
ru case "failed" => "failed"
r := ru::T
g : T->T2
g(r)
In my example,
ru := retractIfCan(x)@Maybe(T)
g : T->T2
map(g, ru)
If there's still a failure in g:
ru := retractIfCan(x)@Maybe(T)
g : T->Maybe T2
ru >> g
--
You received this message because you are subscribed to the Google Groups
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/fricas-devel.
For more options, visit https://groups.google.com/d/optout.