def search(phrase:str, limit: Optional[int] = None) -> List[Post]: # XXX this could benefit from caching and from preindexing return list(islice((post for post in posts if phrase in post.text), limit))