repositories
/
cc1516.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ca55bc8
)
Maybe fmap no longer edits input
author
pimjager
<pim@pimjager.nl>
Thu, 23 Jun 2016 10:38:59 +0000
(12:38 +0200)
committer
pimjager
<pim@pimjager.nl>
Thu, 23 Jun 2016 10:38:59 +0000
(12:38 +0200)
examples/demo/maybe.spl
patch
|
blob
|
history
diff --git
a/examples/demo/maybe.spl
b/examples/demo/maybe.spl
index
a4b9416
..
b676aea
100644
(file)
--- a/
examples/demo/maybe.spl
+++ b/
examples/demo/maybe.spl
@@
-6,26
+6,26
@@
pure(a) :: a -> (Int, a) {
return (1, a);
}
return (1, a);
}
-//note, ma is edited by reference!
fmap(f, ma) :: (a -> b) -> (Int, a) -> (Int, b) {
fmap(f, ma) :: (a -> b) -> (Int, a) -> (Int, b) {
+ var t = ma.snd; //copy to avoid editing ma by reference
if (ma.fst == 0) { return ma; }
else {
if (ma.fst == 0) { return ma; }
else {
-
ma.snd
= f(ma.snd);
- return
ma
;
+
t
= f(ma.snd);
+ return
(ma.fst, t)
;
}
}
}
}
+
bind(ma, f) :: (Int, a) -> (a -> (Int, b)) -> (Int, b) {
if (ma.fst == 0) { return ma; }
else {
bind(ma, f) :: (Int, a) -> (a -> (Int, b)) -> (Int, b) {
if (ma.fst == 0) { return ma; }
else {
- return f(ma.snd);
+ return f(ma.snd);
}
}
main() {
var j = pure(True);
}
}
main() {
var j = pure(True);
- var f = \b->!b;
var n = (0, False); //ugly that we need the additional parameter
var jf = fmap(\b->!b, j);
var n = (0, False); //ugly that we need the additional parameter
var jf = fmap(\b->!b, j);
@@
-33,12
+33,12
@@
main() {
var fma = \b -> pure(!b);
var fma = \b -> pure(!b);
- var bjf = bind(j, fma);
//note is true because ma is passed by reference
+ var bjf = bind(j, fma);
bar bnf = bind(n, fma);
print("fmap Just false: ", jf.fst, jf.snd, "\n");
print("fmap Nothing: ", nf.fst, "\n");
bar bnf = bind(n, fma);
print("fmap Just false: ", jf.fst, jf.snd, "\n");
print("fmap Nothing: ", nf.fst, "\n");
- print("bind Just
Tru
e: ", bjf.fst, bjf.snd, "\n");
+ print("bind Just
Fals
e: ", bjf.fst, bjf.snd, "\n");
print("bind Nothing: ", bnf.fst, "\n");
}
\ No newline at end of file
print("bind Nothing: ", bnf.fst, "\n");
}
\ No newline at end of file