@@ -30,10 +30,10 @@ See "Strongweak" for class design notes and laws.
30
30
-}
31
31
class Weaken a where
32
32
-- | The weakened type for some type.
33
- type Weak a :: Type
33
+ type Weakened a :: Type
34
34
35
- -- | Weaken some @a@ to its associated weak type @'Weak ' a@.
36
- weaken :: a -> Weak a
35
+ -- | Weaken some @a@ to its associated weak type @'Weakened ' a@.
36
+ weaken :: a -> Weakened a
37
37
38
38
-- | Strength enumeration: is it strong, or weak?
39
39
--
@@ -42,7 +42,7 @@ data Strength = Strong | Weak
42
42
43
43
-- | Lift a function on a weak type to the associated strong type by weakening
44
44
-- first.
45
- liftWeakF :: Weaken a => (Weak a -> b ) -> (a -> b )
45
+ liftWeakF :: Weaken a => (Weakened a -> b ) -> (a -> b )
46
46
liftWeakF f = f . weaken
47
47
48
48
{- | Get either the strong or weak representation of a type, depending on the
@@ -59,93 +59,93 @@ data A (s :: Strength) = A
59
59
@
60
60
-}
61
61
type family SW (s :: Strength ) a :: Type where
62
- SW ' Strong a = a
63
- SW ' Weak a = Weak a
62
+ SW Strong a = a
63
+ SW Weak a = Weakened a
64
64
65
65
-- | Track multiple levels of weakening. Silly thought I had, don't think it's
66
66
-- useful.
67
67
type family SWDepth (n :: Natural ) a :: Type where
68
68
SWDepth 0 a = a
69
- SWDepth n a = Weak (SWDepth (n - 1 ) a )
69
+ SWDepth n a = Weakened (SWDepth (n - 1 ) a )
70
70
71
71
-- | Strip refined type refinement.
72
- instance Weaken (Refined p a ) where
73
- type Weak (Refined p a ) = a
72
+ instance Weaken (Refined p a ) where
73
+ type Weakened (Refined p a ) = a
74
74
weaken = unrefine
75
75
76
76
-- | Strip refined functor type refinement.
77
- instance Weaken (Refined1 p f a ) where
78
- type Weak (Refined1 p f a ) = f a
77
+ instance Weaken (Refined1 p f a ) where
78
+ type Weakened (Refined1 p f a ) = f a
79
79
weaken = unrefine1
80
80
81
81
-- | Weaken non-empty lists into plain lists.
82
- instance Weaken (NonEmpty a ) where
83
- type Weak (NonEmpty a ) = [a ]
82
+ instance Weaken (NonEmpty a ) where
83
+ type Weakened (NonEmpty a ) = [a ]
84
84
weaken = NonEmpty. toList
85
85
86
86
-- | Weaken sized vectors into plain lists.
87
87
instance VG. Vector v a => Weaken (VGS. Vector v n a ) where
88
- type Weak (VGS. Vector v n a ) = [a ]
88
+ type Weakened (VGS. Vector v n a ) = [a ]
89
89
weaken = VGS. toList
90
90
91
91
-- | Strip wrapper.
92
- instance Weaken (Identity a ) where
93
- type Weak (Identity a ) = a
92
+ instance Weaken (Identity a ) where
93
+ type Weakened (Identity a ) = a
94
94
weaken = runIdentity
95
95
96
96
-- | Strip wrapper.
97
- instance Weaken (Const a b ) where
98
- type Weak (Const a b ) = a
97
+ instance Weaken (Const a b ) where
98
+ type Weakened (Const a b ) = a
99
99
weaken = getConst
100
100
101
101
{- TODO controversial. seems logical, but also kinda annoying.
102
102
-- | Weaken 'Maybe' (0 or 1) into '[]' (0 to n).
103
103
instance Weaken (Maybe a) where
104
- type Weak (Maybe a) = [a]
104
+ type Weakened (Maybe a) = [a]
105
105
weaken = \case Just a -> [a]
106
106
Nothing -> []
107
107
-}
108
108
109
109
-- Weaken the bounded Haskell numeric types using 'fromIntegral'.
110
- instance Weaken Word8 where
111
- type Weak Word8 = Natural
110
+ instance Weaken Word8 where
111
+ type Weakened Word8 = Natural
112
112
weaken = fromIntegral
113
- instance Weaken Word16 where
114
- type Weak Word16 = Natural
113
+ instance Weaken Word16 where
114
+ type Weakened Word16 = Natural
115
115
weaken = fromIntegral
116
- instance Weaken Word32 where
117
- type Weak Word32 = Natural
116
+ instance Weaken Word32 where
117
+ type Weakened Word32 = Natural
118
118
weaken = fromIntegral
119
- instance Weaken Word64 where
120
- type Weak Word64 = Natural
119
+ instance Weaken Word64 where
120
+ type Weakened Word64 = Natural
121
121
weaken = fromIntegral
122
- instance Weaken Int8 where
123
- type Weak Int8 = Integer
122
+ instance Weaken Int8 where
123
+ type Weakened Int8 = Integer
124
124
weaken = fromIntegral
125
- instance Weaken Int16 where
126
- type Weak Int16 = Integer
125
+ instance Weaken Int16 where
126
+ type Weakened Int16 = Integer
127
127
weaken = fromIntegral
128
- instance Weaken Int32 where
129
- type Weak Int32 = Integer
128
+ instance Weaken Int32 where
129
+ type Weakened Int32 = Integer
130
130
weaken = fromIntegral
131
- instance Weaken Int64 where
132
- type Weak Int64 = Integer
131
+ instance Weaken Int64 where
132
+ type Weakened Int64 = Integer
133
133
weaken = fromIntegral
134
134
135
135
--------------------------------------------------------------------------------
136
136
137
137
-- | Decomposer. Weaken every element in a list.
138
138
instance Weaken a => Weaken [a ] where
139
- type Weak [a ] = [Weak a ]
139
+ type Weakened [a ] = [Weakened a ]
140
140
weaken = map weaken
141
141
142
142
-- | Decomposer. Weaken both elements of a tuple.
143
143
instance (Weaken a , Weaken b ) => Weaken (a , b ) where
144
- type Weak (a , b ) = (Weak a , Weak b )
144
+ type Weakened (a , b ) = (Weakened a , Weakened b )
145
145
weaken (a, b) = (weaken a, weaken b)
146
146
147
147
-- | Decomposer. Weaken either side of an 'Either'.
148
148
instance (Weaken a , Weaken b ) => Weaken (Either a b ) where
149
- type Weak (Either a b ) = Either (Weak a ) (Weak b )
149
+ type Weakened (Either a b ) = Either (Weakened a ) (Weakened b )
150
150
weaken = \ case Left a -> Left $ weaken a
151
151
Right b -> Right $ weaken b
0 commit comments