module MyState where type Pos s a = s -> (a, a -> s) p2_1 :: Pos (x, y) x p2_1 = \ (x, y) -> (x, \ x1 -> (x1, y)) xP = p2_1 p2_2 :: Pos (x, y) y p2_2 = \ (x, y) -> (y, \ y1 -> (x, y1)) yP = p2_2 p3_1 :: Pos (x, y, z) x p3_1 = \ (x, y, z) -> (x, \ x1 -> (x1, y, z)) xT = p3_1 p3_2 :: Pos (x, y, z) y p3_2 = \ (x, y, z) -> (y, \ y1 -> (x, y1, z)) yT = p3_2 p3_3 :: Pos (x, y, z) z p3_3 = \ (x, y, z) -> (z, \ z1 -> (x, y, z1)) zT = p3_3 class MyState m where get :: Pos s a -> m s a set :: Pos s a -> a -> m s ()