on master help sign in
Fixity (#36)
1ea7c74iko
.hlint.yaml+81−14
@@ -86,17 +86,84 @@
86 - -XUndecidableInstances
86 - -XUndecidableInstances
87 - -XRankNTypes
87 - -XRankNTypes
88
88
89+# hints found in src/Control/SemiIso.hs
90+- warn: {lhs: "SI (pure . a) (pure . b)", rhs: "siPure a b"}
91+- warn: {lhs: "SemiIso (pure . a) (pure . b)", rhs: "siPure a b"}
92+- warn: {lhs: "SemiIso (const empty) (const empty)", rhs: "zeroArrow"}
93+
94+# hints found in src/Control/Arrow/Extra.hs
89−- fixity: "infixr 5 <+^"
95+- fixity: "infixl 5 <+^"
90−- fixity: "infixr 5 ^+>"
96+- fixity: "infixl 5 ^+>"
91−- fixity: "infixr 5 ^+^"
97+- fixity: "infixl 5 ^+^"
98+- warn: {lhs: "a <+> arr b", rhs: "a <+^ b"}
99+- warn: {lhs: "arr a <+> b", rhs: "a ^+> b"}
100+- warn: {lhs: "arr a <+> arr b", rhs: "a ^+^ b"}
101+
102+# hints found in src/Control/Arrow/Extra/ArrowChoice.hs
92−- fixity: "infixr 2 +++"
103+- fixity: "infixl 2 +++"
93−- fixity: "infixr 2 |||"
104+- fixity: "infixl 2 |||"
105+
106+# hints found in src/Control/Arrow/Extra/ArrowPlus.hs
94−- fixity: "infixr 5 <+>"
107+- fixity: "infixl 5 <+>"
108+
109+# hints found in src/Control/Arrow/Extra/ArrowZero.hs
110+# no hints found
111+
112+# hints found in src/Control/Arrow/Extra/BaseArrow.hs
95−- fixity: "infixr 3 ***"
113+- fixity: "infixl 3 ***"
96−- fixity: "infixr 3 &&&"
114+- fixity: "infixl 3 &&&"
97−- fixity: "infixr 1 ^>>"
115+- fixity: "infixl 1 >>>"
116+- fixity: "infixl 1 <<<"
117+
118+# hints found in src/Control/Arrow/Extra/Orphans.hs
119+# no hints found
120+
121+# hints found in src/Control/Arrow/Extra/PolyArrow.hs
122+- fixity: "infixl 1 ^>>"
98−- fixity: "infixr 1 >>^"
123+- fixity: "infixl 1 >>^"
99−- fixity: "infixr 1 ^<<"
124+- fixity: "infixl 1 ^<<"
100−- fixity: "infixr 1 <<^"
125+- fixity: "infixl 1 <<^"
101−- fixity: "infixr 1 ^>^"
126+- fixity: "infixl 1 ^>^"
102−- fixity: "infixr 1 ^<^"
127+- fixity: "infixl 1 ^<^"
128+- warn: {lhs: "arr a >>> arr b", rhs: "a ^>^ b"}
129+- warn: {lhs: "arr a <<< arr b", rhs: "a ^<^ b"}
130+- warn: {lhs: "arr a >>> b", rhs: "a ^>> b"}
131+- warn: {lhs: "a >>> arr b", rhs: "a >>^ b"}
132+- warn: {lhs: "a <<< arr b", rhs: "a <<^ b"}
133+- warn: {lhs: "arr a <<< b", rhs: "a ^<< b"}
134+
135+# hints found in src/Data/Isoparsec.hs
136+- warn: {lhs: "a <+^ konst ()", rhs: "opt a"}
137+- warn: {lhs: "(b >>^ turn (konst a)) <+^ konst ()", rhs: "opt' a b"}
138+- warn: {lhs: "(a &&& (repeating a <+^ konst [])) >>^ siCons", rhs: "repeating a"}
139+- fixity: "infixl 0 <.>"
140+- warn: {lhs: "(b >>^ morphed) >>^ si a", rhs: "a <.> b"}
141+- warn: {lhs: "siPure coerce coerce", rhs: "coercing"}
142+- warn: {lhs: "siPure morphTuples morphTuples", rhs: "morphed"}
143+- warn: {lhs: "auto @x >>^ turn (konst a)", rhs: "specific a"}
144+- warn: {lhs: "arr (siPure fromIntegral fromIntegral)", rhs: "throughIntegral"}
145+
146+# hints found in src/Data/Isoparsec/ByteString.hs
147+- warn: {lhs: "arr (siPure C.unpack C.pack)", rhs: "utf8"}
148+- warn: {lhs: "bytesToIsoparsec (Proxy @e) >>^ coercing @(Byte16 e) @Word16", rhs: "toIsoparsec"}
149+- warn: {lhs: "bytesToIsoparsec (Proxy @e) >>^ coercing @(Byte32 e) @Word32", rhs: "toIsoparsec"}
150+- warn: {lhs: "bytesToIsoparsec (Proxy @e) >>^ coercing @(Byte64 e) @Word64", rhs: "toIsoparsec"}
151+- warn: {lhs: "anyToken >>> mapIso [(0, False), (1, True)]", rhs: "toIsoparsec"}
152+
153+# hints found in src/Data/Isoparsec/Char.hs
154+- warn: {lhs: "token ' '", rhs: "space"}
155+- warn: {lhs: "tokensWhile isSpace >>^ ((maskr . turn . konst) mempty)", rhs: "unsafeWhiteSpace"}
156+- warn: {lhs: "tokensWhile1 isSpace >>^ ((maskr . turn . konst) (singleton ' '))", rhs: "unsafeWhiteSpace1"}
157+
158+# hints found in src/Data/Isoparsec/Cokleisli.hs
159+- warn: {lhs: "Cokleisli\n (\\ t ->\n case project a t of\n Just x -> return x\n Nothing -> mzero)", rhs: "arr a"}
160+- warn: {lhs: "Cokleisli (const mzero)", rhs: "zeroArrow"}
161+
162+# hints found in src/Data/Isoparsec/Internal.hs
163+- warn: {lhs: "((a &&& arrowsWhile a) >>^ siCons) <+^ isoConst () []", rhs: "arrowsWhile a"}
164+- warn: {lhs: "siMaybe (pure . uncurry cons) uncons", rhs: "siCons"}
165+- warn: {lhs: "SI (\\ c -> guard (a c) >> b c)\n (c >=> (\\ c -> guard (a c) >> pure c))", rhs: "siCheck a b c"}
166+- warn: {lhs: "siCheck a (pure . b) (pure . c)", rhs: "isoCheck a b c"}
167+- warn: {lhs: "SI (const (pure b)) (const (pure a))", rhs: "isoConst a b"}
168+- warn: {lhs: "isoCheck a id id", rhs: "check a"}
169+- warn: {lhs: "SI (const (pure a)) (const (pure ())) >>> check (== a)", rhs: "konst a"}
src/Control/Arrow/Extra.hs+4−4
@@ -14,13 +14,13 @@ import Control.Arrow.Extra.ArrowPlus as X
14import Control.Arrow.Extra.ArrowZero as X
14import Control.Arrow.Extra.ArrowZero as X
15import Control.Arrow.Extra.BaseArrow as X
15import Control.Arrow.Extra.BaseArrow as X
16import Control.Arrow.Extra.PolyArrow as X
16import Control.Arrow.Extra.PolyArrow as X
17−import Control.Category as X
17+import Control.Category as X hiding ((<<<), (>>>))
18
18
19−infixr 5 <+^
19+infixl 5 <+^
20
20
21−infixr 5 ^+>
21+infixl 5 ^+>
22
22
23−infixr 5 ^+^
23+infixl 5 ^+^
24
24
25(<+^) :: (ArrowPlus a, PolyArrow a p) => a b c -> p b c -> a b c
25(<+^) :: (ArrowPlus a, PolyArrow a p) => a b c -> p b c -> a b c
26a <+^ b = a <+> arr b
26a <+^ b = a <+> arr b
src/Control/Arrow/Extra/ArrowChoice.hs+2−2
@@ -9,9 +9,9 @@ import Control.Arrow.Extra.BaseArrow
9import Control.Category
9import Control.Category
10import Data.Either
10import Data.Either
11
11
12−infixr 2 +++
12+infixl 2 +++
13
13
14−infixr 2 |||
14+infixl 2 |||
15
15
16class BaseArrow a => ArrowChoice a where
16class BaseArrow a => ArrowChoice a where
17 left :: a b c -> a (Either b d) (Either c d)
17 left :: a b c -> a (Either b d) (Either c d)
src/Control/Arrow/Extra/ArrowPlus.hs+1−1
@@ -5,7 +5,7 @@ where
5
5
6import Control.Arrow.Extra.ArrowZero
6import Control.Arrow.Extra.ArrowZero
7
7
8−infixr 5 <+>
8+infixl 5 <+>
9
9
10class ArrowZero a => ArrowPlus a where
10class ArrowZero a => ArrowPlus a where
11 (<+>) :: a b c -> a b c -> a b c
11 (<+>) :: a b c -> a b c -> a b c
src/Control/Arrow/Extra/BaseArrow.hs+15−3
@@ -2,14 +2,16 @@
2
2
3module Control.Arrow.Extra.BaseArrow
3module Control.Arrow.Extra.BaseArrow
4 ( BaseArrow (..),
4 ( BaseArrow (..),
5+ (>>>),
6+ (<<<),
5 )
7 )
6where
8where
7
9
8−import Control.Category
10+import Control.Category hiding ((<<<), (>>>))
9
11
10−infixr 3 ***
12+infixl 3 ***
11
13
12−infixr 3 &&&
14+infixl 3 &&&
13
15
14class Category a => BaseArrow a where
16class Category a => BaseArrow a where
15 {-# MINIMAL (***), (&&&) #-}
17 {-# MINIMAL (***), (&&&) #-}
@@ -23,3 +25,13 @@ class Category a => BaseArrow a where
23 (***) :: a b c -> a b' c' -> a (b, b') (c, c')
25 (***) :: a b c -> a b' c' -> a (b, b') (c, c')
24
26
25 (&&&) :: a b c -> a b c' -> a b (c, c')
27 (&&&) :: a b c -> a b c' -> a b (c, c')
28+
29+infixl 1 >>>
30+
31+(>>>) :: Category cat => cat a b -> cat b c -> cat a c
32+x >>> y = y . x
33+
34+infixl 1 <<<
35+
36+(<<<) :: Category cat => cat b c -> cat a b -> cat a c
37+x <<< y = x . y
src/Control/Arrow/Extra/PolyArrow.hs+3−4
@@ -10,13 +10,12 @@ module Control.Arrow.Extra.PolyArrow
10where
10where
11
11
12import Control.Arrow.Extra.BaseArrow
12import Control.Arrow.Extra.BaseArrow
13−import Control.Category
14
13
15−infixr 1 ^>>, >>^
14+infixl 1 ^>>, >>^
16
15
17−infixr 1 ^<<, <<^
16+infixl 1 ^<<, <<^
18
17
19−infixr 1 ^>^, ^<^
18+infixl 1 ^>^, ^<^
20
19
21class BaseArrow a => PolyArrow a p where
20class BaseArrow a => PolyArrow a p where
22 arr :: p b c -> a b c
21 arr :: p b c -> a b c
src/Control/Tuple/Morph.hs+2−2
@@ -60,7 +60,7 @@ data HList (ts :: [*]) where
60 HCons :: t -> HList tt -> HList (t ': tt)
60 HCons :: t -> HList tt -> HList (t ': tt)
61 HNil :: HList '[]
61 HNil :: HList '[]
62
62
63−infixr 5 :+
63+infixl 5 :+
64
64
65pattern (:+) :: (ts ~ (t : tt)) => t -> HList tt -> HList ts
65pattern (:+) :: (ts ~ (t : tt)) => t -> HList tt -> HList ts
66pattern (:+) a b = HCons a b
66pattern (:+) a b = HCons a b
@@ -92,7 +92,7 @@ instance (DroppableList n aa bb) => DroppableList ('S n) (a ': aa) bb where
92
92
93-- ## Appending
93-- ## Appending
94
94
95−infixr 4 ++:
95+infixl 4 ++:
96
96
97class AppendableList aa bb cc | aa bb -> cc where
97class AppendableList aa bb cc | aa bb -> cc where
98 (++:) :: HList aa -> HList bb -> HList (aa ++ bb)
98 (++:) :: HList aa -> HList bb -> HList (aa ++ bb)
src/Data/Isoparsec.hs+2−2
@@ -29,12 +29,12 @@ opt :: (ArrowPlus m, PolyArrow m SemiIso) => m () () -> m () ()
29opt m = m <+^ konst ()
29opt m = m <+^ konst ()
30
30
31opt' :: (ArrowPlus m, PolyArrow m SemiIso, Eq a) => a -> m () a -> m () ()
31opt' :: (ArrowPlus m, PolyArrow m SemiIso, Eq a) => a -> m () a -> m () ()
32−opt' a m = (m >>^ turn (konst a)) <+^ konst ()
32+opt' a m = opt (m >>^ turn (konst a))
33
33
34repeating :: (PolyArrow m SemiIso, ArrowPlus m, Eq b) => m () b -> m () [b]
34repeating :: (PolyArrow m SemiIso, ArrowPlus m, Eq b) => m () b -> m () [b]
35repeating m = (m &&& (repeating m <+^ konst [])) >>^ siCons
35repeating m = (m &&& (repeating m <+^ konst [])) >>^ siCons
36
36
37−infixr 0 <.>
37+infixl 0 <.>
38
38
39(<.>) ::
39(<.>) ::
40 (PolyArrow m SemiIso, TupleMorphable x c, TupleMorphable y c) =>
40 (PolyArrow m SemiIso, TupleMorphable x c, TupleMorphable y c) =>
src/Data/Isoparsec/ByteString.hs+4−3
@@ -84,8 +84,9 @@ newtype SSHString = SSHString {unSSHString :: String}
84
84
85instance ToIsoparsec SSHString ByteString where
85instance ToIsoparsec SSHString ByteString where
86 toIsoparsec =
86 toIsoparsec =
87+ auto @(Byte32 'BE)
87− auto @(Byte32 'BE) >>> coercing @Word32
88+ >>^ coercing @Word32
88− ^>> siPure fromIntegral fromIntegral
89+ >>^ siPure fromIntegral fromIntegral
89− ^>> manyTokens
90+ >>> manyTokens
90 >>> utf8
91 >>> utf8
91 >>^ siPure SSHString unSSHString
92 >>^ siPure SSHString unSSHString
src/Data/Isoparsec/Cokleisli.hs+2−4
@@ -26,10 +26,8 @@ instance (Alternative m, Monad m) => BaseArrow (Cokleisli m) where
26 (Cokleisli cb) &&& (Cokleisli c'b) = Cokleisli $
26 (Cokleisli cb) &&& (Cokleisli c'b) = Cokleisli $
27 \(c, c') -> c'b c' >> cb c
27 \(c, c') -> c'b c' >> cb c
28
28
29−instance MonadPlus m => PolyArrow (Cokleisli m) SemiIso where
29+instance (Alternative m, Monad m) => PolyArrow (Cokleisli m) SemiIso where
30− arr si = Cokleisli $ \t -> case project si t of
30+ arr si = Cokleisli $ \t -> project si t
31− Just x -> return x
32− Nothing -> mzero
33
31
34instance MonadPlus m => ArrowZero (Cokleisli m) where
32instance MonadPlus m => ArrowZero (Cokleisli m) where
35 zeroArrow = Cokleisli $ const mzero
33 zeroArrow = Cokleisli $ const mzero
src/Data/Isoparsec/Internal.hs+2−2
@@ -35,7 +35,7 @@ class
35 tokens :: [Element s] -> m () ()
35 tokens :: [Element s] -> m () ()
36 default tokens :: [Element s] -> m () ()
36 default tokens :: [Element s] -> m () ()
37 tokens [] = arr $ isoConst () ()
37 tokens [] = arr $ isoConst () ()
38− tokens (t : ts) = token t &&& tokens ts >>> arr (isoConst ((), ()) ())
38+ tokens (t : ts) = token t &&& tokens ts >>^ isoConst ((), ()) ()
39
39
40 chunk :: s -> m () ()
40 chunk :: s -> m () ()
41 chunk = tokens . otoList
41 chunk = tokens . otoList
@@ -116,4 +116,4 @@ check :: (s -> Bool) -> SemiIso s s
116check f = isoCheck f id id
116check f = isoCheck f id id
117
117
118konst :: Eq x => x -> SemiIso () x
118konst :: Eq x => x -> SemiIso () x
119−konst x = SI (const $ pure x) (const $ pure ()) >>> check (== x)
119+konst x = isoConst () x >>> check (== x)
test/Spec/Megaparsec/BasicNums.hs+2−2
@@ -34,8 +34,8 @@ parser = _Foo <.> (number &&& unsafeWhiteSpace1 &&& number)
34spec :: Spec
34spec :: Spec
35spec =
35spec =
36 it "deserializes" $ do
36 it "deserializes" $ do
37− runMegaparsec @() parser "12 31" `shouldBe` (Right $ Foo 12 31)
37+ runMegaparsec @() parser "12 31" `shouldBe` Right (Foo 12 31)
38− runMegaparsec @() parser "1 33" `shouldBe` (Right $ Foo 1 33)
38+ runMegaparsec @() parser "1 33" `shouldBe` Right (Foo 1 33)
39 runMegaparsec @() parser "1562" `shouldSatisfy` isLeft
39 runMegaparsec @() parser "1562" `shouldSatisfy` isLeft
40
40
41quickSpec :: TestTree
41quickSpec :: TestTree
test/Spec/Ssh.hs+8−9
@@ -153,16 +153,15 @@ makePrisms ''Packet
153
153
154instance ToIsoparsec mac ByteString => ToIsoparsec (Packet mac) ByteString where
154instance ToIsoparsec mac ByteString => ToIsoparsec (Packet mac) ByteString where
155 toIsoparsec =
155 toIsoparsec =
156− ( ( (auto @(Byte32 'BE) &&& auto @Byte8)
156+ ( auto @(Byte32 'BE) &&& auto @Byte8
157− >>> (throughIntegral *** throughIntegral)
157+ >>> throughIntegral *** throughIntegral
158− >>> siPure
158+ >>^ siPure
159− (\(packetL, paddingL) -> (packetL - paddingL - 1, paddingL))
159+ (\(packetL, paddingL) -> (packetL - paddingL - 1, paddingL))
160− (\(payloadL, paddingL) -> (payloadL + paddingL + 1, paddingL))
160+ (\(payloadL, paddingL) -> (payloadL + paddingL + 1, paddingL))
161− ^>> (manyTokens *** throughIntegral)
161+ >>> manyTokens *** throughIntegral
162− >>> (tuck (auto @Payload) *** badZeroPadding)
162+ >>> tuck (auto @Payload) *** badZeroPadding
163− )
164− &&& auto @mac
165 )
163 )
164+ &&& auto @mac
166 >>^ siPure (\((a, b), c) -> Packet a b c) (\(Packet a b c) -> ((a, b), c))
165 >>^ siPure (\((a, b), c) -> Packet a b c) (\(Packet a b c) -> ((a, b), c))
167
166
168spec :: Spec
167spec :: Spec
test/Spec/TwoDigits.hs+3−3
@@ -25,9 +25,9 @@ newtype SingleDigit = SingleDigit {unSingleDigit :: String}
25instance ToIsoparsec SingleDigit String where
25instance ToIsoparsec SingleDigit String where
26 toIsoparsec =
26 toIsoparsec =
27 toIsoparsec @(Chunk 1 String)
27 toIsoparsec @(Chunk 1 String)
28− >>> coercing
28+ >>^ coercing
29− ^>> check (all @[] isDigit)
29+ >>^ check (all @[] isDigit)
30− ^>^ coercing
30+ >>^ coercing
31
31
32instance (Arbitrary SingleDigit) where
32instance (Arbitrary SingleDigit) where
33 arbitrary = SingleDigit . pure <$> elements ['0' .. '9']
33 arbitrary = SingleDigit . pure <$> elements ['0' .. '9']