Welcome, guest | Sign In | My Account | Store | Cart
#!/usr/bin/env python
# -*- coding: utf-8 -*-

class Maybe(object):
    _has_value = False
    _value = None
    def __init__(self, value):
        if value is not None:
            self._has_value = True
            self._value = value

    def __nonzero__(self):
        return self.has_value

    @property
    def has_value(self):
        return self._has_value

    @property
    def value(self):
        return self._value

# optional sugar factories
def Some(value):
    return Maybe(value)

def NoValue():
    return Maybe(None)

if __name__ == "__main__":
    class MaybeSupportingRepository(object):
        def __init__(self, *args):
            self._d = dict(args)

        def get(self, key):
            return Maybe(self._d.get(key))
 
    repo = MaybeSupportingRepository( ("a", 1), ("b", 2), ("c", 3) )

    key = "x"
    maybe_v = repo.get(key)
    if maybe_v:
        print "There's a value for %s: %s" % (key, maybe_v.value)
    else:
        print "There's no value for %s" % key

    key = "a"
    maybe_v = repo.get(key)
    if maybe_v.has_value:
        print "There's a value for %s: %s" % (key, maybe_v.value)
    else:
        print "There's no value for %s" % key

History