def create_dataclass_loader(cls, registry, field_getters):
    """create a loader for a dataclass type"""
    fields = cls.__dataclass_fields__
    item_loaders = map(registry, map(attrgetter('type'), fields.values()))
    getters = map(field_getters.__getitem__, fields)
    loaders = list(starmap(compose, zip(item_loaders, getters)))

    def dloader(obj):
        return cls(*(g(obj) for g in loaders))

    return dloader
def create_dataclass_loader ( cls , registry , field_getters ) : fields = cls . __dataclass_fields__ item_loaders = map ( registry , map ( attrgetter ( 'type' ) , fields . values ( ) ) ) getters = map ( field_getters . __getitem__ , fields ) loaders = list ( starmap ( compose , zip ( item_loaders , getters ) ) ) def dloader ( obj ) : return cls ( * ( g ( obj ) for g in loaders ) ) return dloader
create a loader for a dataclass type