# LANGUAGE PatternSynonyms #
module PolyPat where

-- Testing whether type changing updates work correctly.

pattern MyTuple :: a -> b -> (a, b)
pattern MyTuple{mfst, msnd} = (mfst, msnd)


expr1 :: (Int, String) -> (Int, Int)
expr1 a = a { msnd = 2}

expr3 a = a { msnd = 2}

expr2 :: (a, b) -> a
expr2 a = mfst a

 Testing whether type changing updates work correctly.
# LANGUAGE PatternSynonyms #
module PolyPat where


pattern MyTuple :: a -> b -> (a, b)
pattern MyTuple{mfst, msnd} = (mfst, msnd)


expr1 :: (Int, String) -> (Int, Int)
expr1 a = a { msnd = 2}

expr3 a = a { msnd = 2}

expr2 :: (a, b) -> a
expr2 a = mfst a
