retrie-1.0.0.0: tests/inputs/PatternSyn1.test
# Copyright (c) Facebook, Inc. and its affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
#
--pattern-forward PatternSyn1.JustUnit
--pattern-forward PatternSyn1.Some
--pattern-forward PatternSyn1.SomeUni
--pattern-forward PatternSyn1.LeftSomething
--pattern-forward PatternSyn1.JustNot
--adhoc-pattern "SomeAdhoc x = Just x"
--adhoc-pattern "SomeAdhoc2 x <- Just x"
===
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ViewPatterns #-}
module PatternSyn1 where
pattern JustUnit = Just ()
pattern Some x <- Just x where Some x = Just x
pattern SomeUni x <- Just x
pattern JustNot x <- Just (not -> x) where JustNot x = Just (not x)
pattern LeftSomething <- Left _
pattern SomeAdhoc x = Just x
pattern SomeAdhoc2 x = Just x
foo :: Maybe () -> Maybe ()
-foo JustUnit = JustUnit
+foo (Just ()) = Just ()
-foo (id -> JustUnit) = JustUnit
+foo (id -> Just ()) = Just ()
-foo (Some ()) = Some ()
+foo (Just ()) = Just ()
-foo (SomeUni ()) = Just ()
+foo (Just ()) = Just ()
-foo (Some x) = let x = Some () in x
+foo (Just x) = let x = Just () in x
-foo (SomeAdhoc ()) = SomeAdhoc ()
+foo (Just ()) = Just ()
-foo (SomeAdhoc2 ()) = SomeAdhoc2 ()
+foo (Just ()) = SomeAdhoc2 ()
fooBool :: Maybe Bool -> MaybeBool
-fooBool (JustNot x) = JustNot x
+fooBool (Just (not -> x)) = Just (not x)
bar :: Either () () -> Either () ()
-bar LeftSomething = Left ()
+bar (Left _) = Left ()