Skip to content

Instantly share code, notes, and snippets.

@zsiciarz
Created November 27, 2014 21:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zsiciarz/e15199d9be1b0e07faf6 to your computer and use it in GitHub Desktop.
Save zsiciarz/e15199d9be1b0e07faf6 to your computer and use it in GitHub Desktop.
import functools
import types
@functools.singledispatch
def fmap(value, fun):
return value
@fmap.register(list)
def _(value, fun):
return [fun(item) for item in value]
@fmap.register(dict)
def _(value, fun):
return {key: fun(item) for key, item in value.items()}
@fmap.register(set)
def _(value, fun):
return {fun(item) for item in value}
@fmap.register(types.FunctionType)
def _(value, fun):
return lambda x: fun(value(x))
def add_suffix(s):
return s + " world"
def upper(s):
return s.upper()
print(fmap(["foo", "bar"], upper))
print(fmap({1: "foo", 2: "bar"}, upper))
print(fmap({"foo", "bar"}, upper))
print(fmap(add_suffix, upper)("Hello"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment