Skip to content

Instantly share code, notes, and snippets.

@calebh
Created July 21, 2019 00:11
Show Gist options
  • Save calebh/e17b9051ff7920dde8ff481a156ad2fb to your computer and use it in GitHub Desktop.
Save calebh/e17b9051ff7920dde8ff481a156ad2fb to your computer and use it in GitHub Desktop.
typeclassinstance Monad<Nullable> {
Nullable<b> >>= <a,b>(Nullable<a> x, Func<a, Nullable<b>> f) {
if (x.HasValue) {
return f(x.Value);
} else {
return null;
}
}
Nullable<a> return_ <a>(x) {
return new Nullable<a>(x);
}
}
typeclassinstance Monad<List> {
List<b> >>= <a, b>(List<a> xs, Func<a, List<b>> f) {
List<b> ret = new List<b>();
foreach (a x in xs) {
ret.AddRange(f(x));
}
return ret;
}
List<a> return_ <a>(a x) {
return new List<a> {x};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment