Seol mar théacs é seo: Verifying Higher-Order Functional Programs with Pattern-Matching Algebraic Data Types