import io_tty
def coloop(scope={}, \
           default={}, \
           bllst=[], \
           put=io_tty.put, \
           get=io_tty.get, \
           log=io_tty.log
           ):
    '''
    '''
    default.update({
        'default' : True,
        'player' : default.get('player','guess'),
        'next' : default.get('next','begin')
    })
    payload = default
    while not payload or payload.get('next','begin') in scope:
        for bl in bllst:
            payload = bl(payload,log)
        payload = scope[payload['next']](payload,put,get)
    return payload

if __name__ == '__main__':
    def guess42(payload,put,get):
        guessed = get('guest my number ',[str(num) for num in range(100)])[0]
        try:
            num = int(float(guessed))
        except:
            num = None
        if num != 0 and not num:
            put('a number please')
            payload['next'] = 'guess'
        if num < 42:
            put('higher')
            payload['next'] = 'guess'
        elif int(float(guessed)) > 42:
            put('lower')
            payload['next'] = 'guess'
        else:
            put('this is it')
            payload['next'] = 'win'
        return payload

    import io_tty,coloop
    coloop.coloop({'guess':guess42},{'next':'guess'},put=io_tty.put,get=io_tty.get)
