#NEWLINE# def fmap( func , obj ) : #NEWLINE# #INDENT# if isinstance ( obj , tuple ) : #NEWLINE# #INDENT# return tuple ( map ( functools . partial ( fmap , func ) , obj ) ) #NEWLINE# #UNINDENT# iterableitems = isinstance ( obj , list ) #NEWLINE# if ( not iterableitems ) : #NEWLINE# #INDENT# try : #NEWLINE# #INDENT# iterableitems = isinstance ( obj , ( filter , map , zip ) ) #NEWLINE# #UNINDENT# except TypeError : #NEWLINE# #INDENT# pass #NEWLINE# #UNINDENT# #UNINDENT# if iterableitems : #NEWLINE# #INDENT# return map ( functools . partial ( fmap , func ) , obj ) #NEWLINE# #UNINDENT# if hasattr ( obj , 'fmap' ) : #NEWLINE# #INDENT# return obj . fmap ( func ) #NEWLINE# #UNINDENT# return func ( obj )