From b35023bc6ca214dff12b218e6e1599e1b6315a61 Mon Sep 17 00:00:00 2001 From: vigress8 <150687949+vigress8@users.noreply.github.com> Date: Fri, 22 Nov 2024 14:21:02 +0400 Subject: [PATCH] Add pattern synonyms for IsSequence --- classy-prelude/src/ClassyPrelude.hs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/classy-prelude/src/ClassyPrelude.hs b/classy-prelude/src/ClassyPrelude.hs index ae14fb22..eba39975 100644 --- a/classy-prelude/src/ClassyPrelude.hs +++ b/classy-prelude/src/ClassyPrelude.hs @@ -1,7 +1,10 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE ViewPatterns #-} + module ClassyPrelude ( -- * CorePrelude module CorePrelude @@ -129,6 +132,9 @@ module ClassyPrelude , DList , asDList , applyDList + -- ** Pattern synonyms for sequences + , pattern Empty + , pattern Cons -- ** Exceptions , module Control.DeepSeq -- ** Force types @@ -627,6 +633,18 @@ getContents = liftIO LTextIO.getContents interact :: MonadIO m => (LText -> LText) -> m () interact = liftIO . LTextIO.interact +-- | Pattern synonyms for working with sequences, +-- corresponding to [] and (x : xs) for List +-- +-- @since 1.5.1 +{-# COMPLETE Empty, Cons #-} +pattern Empty :: IsSequence seq => seq +pattern Empty <- (uncons -> Nothing) where + Empty = fromList [] + +pattern Cons :: IsSequence seq => Element seq -> seq -> seq +pattern Cons x xs <- (uncons -> Just (x, xs)) where + Cons = cons #if MIN_VERSION_time(1,10,0) parseTime