use LambdaCase+ViewPatterns
extract punctuationAware composition