{'fraction_non_alphanumeric': 0.015817223198594025, 'fraction_numerical': 0.01054481546572935, 'mean_word_length': 5.551724137931035, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Draft Proceedings of the 24th Symposium on Implementation and Application of Functional Languages (IFL 2012)

Higher-order functions that are polymorphic in a monad make highly flexible modular components. Unfortunately, the combination of an unknown function parameter and a polymorphic monad are detrimental to reasoning. This paper shows how to eliminate both the function parameter and the polymorphism. The resulting characterization is amenable to reasoning. The approach is based on a judicious combination of the coroutine monad transformer and monad morphisms.