blob: 512a882da42efbe8918e650a2d042a4bc2460665 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
{-# LANGUAGE RoleAnnotations #-}
module T10698 where
import Data.Coerce
data Map k a = Map k a
type role Map nominal representational
map1 :: (k1->k2) -> Map k1 a -> Map k2 a
map1 f (Map a b) = Map (f a) b
{-# NOINLINE [1] map1 #-}
{-# RULES
"map1/coerce" map1 coerce = coerce
#-}
map2 :: (a -> b) -> Map k a -> Map k b
map2 f (Map a b) = Map a (f b)
{-# NOINLINE [1] map2 #-}
{-# RULES
"map2/coerce" map2 coerce = coerce
#-}
|