The uncertainty of how software libraries will be used in practice often leads their creators to identifying prospective use cases and covering many of these with multi purpose programming interfaces. However, the more flexible the interfaces, the harder they are to learn to efficiently use. To keep interfaces simple while enabling complex usage scenarios, in this thesis we propose a novel technique, in which software engi neers using the libraries declare only available data and desired forms (e.g., data types) that would result by appropriately applying available interfaces. Then, we automate the process of transforming data to desired forms with a type-driven synthesis approach within domain-specific languages (DSL) describing library interfaces. To this end, we look at Cartesian Genetic Programming (CGP) to synthesize data transformations by combining interfaces. Unfortunately, existing CGP fitness functions that recommend which interfaces to apply at each transformation step are unable to properly capture how well synthesized solutions approximate the desired ones and, consequently, fail to synthesize complex transformations. To address this shortcoming, we introduce a scheme that neurally learns fitness functions and train this on each DSL by artificially generating synthesis examples. Our approach is implemented as a Python package, named Pymeleon, which can be used to simplify usage of real-world libraries. Experi ments on 20 benchmark synthesis tasks of various complexities across 4 programming interfaces show that the proposed neural fitness function outperforms CGP, especially in synthesizing complex transformations, and, in most cases, succeeds in producing the desired results. We also conduct a case study, in which we show that, compared to implementing complex interface wrappers that simplify end-code but are hard to use, minimal additional effort in declaring library DSLs drastically reduces software engineering effort in reusing interfaces.