Skip to content

Commit 5a93d5f

Browse files
authored
dhall/format: Keep track of CharacterSet for Equivalent (#2176)
1 parent e2f4232 commit 5a93d5f

File tree

11 files changed

+33
-29
lines changed

11 files changed

+33
-29
lines changed

dhall-json/src/Dhall/JSON.hs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1040,8 +1040,8 @@ convertToHomogeneousMaps (Conversion {..}) e0 = loop (Core.normalize e0)
10401040
where
10411041
a' = loop a
10421042

1043-
Core.Equivalent a b ->
1044-
Core.Equivalent a' b'
1043+
Core.Equivalent cs a b ->
1044+
Core.Equivalent cs a' b'
10451045
where
10461046
a' = loop a
10471047
b' = loop b

dhall-nix/src/Dhall/Nix.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ dhallToNix e =
642642
Left CannotProjectByType
643643
loop (Assert _) =
644644
return untranslatable
645-
loop (Equivalent _ _) =
645+
loop (Equivalent _ _ _) =
646646
return untranslatable
647647
loop a@With{} =
648648
loop (Dhall.Core.desugarWith a)

dhall/src/Dhall/Binary.hs

+2-2
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ decodeExpressionInternal decodeEmbed = go
319319
9 -> return (Prefer mempty PreferFromSource)
320320
10 -> return (CombineTypes mempty)
321321
11 -> return ImportAlt
322-
12 -> return Equivalent
322+
12 -> return (Equivalent mempty)
323323
13 -> return RecordCompletion
324324
_ -> die ("Unrecognized operator code: " <> show opcode)
325325

@@ -792,7 +792,7 @@ encodeExpressionInternal encodeEmbed = go
792792
ImportAlt l r ->
793793
encodeOperator 11 l r
794794

795-
Equivalent l r ->
795+
Equivalent _ l r ->
796796
encodeOperator 12 l r
797797

798798
RecordCompletion l r ->

dhall/src/Dhall/Diff.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -992,7 +992,7 @@ diffEquivalentExpression
992992
diffEquivalentExpression l@(Equivalent {}) r@(Equivalent {}) =
993993
enclosed' " " (operator "" <> " ") (docs l r)
994994
where
995-
docs (Equivalent aL bL) (Equivalent aR bR) =
995+
docs (Equivalent _ aL bL) (Equivalent _ aR bR) =
996996
Data.List.NonEmpty.cons (diffApplicationExpression aL aR) (docs bL bR)
997997
docs aL aR =
998998
pure (diffApplicationExpression aL aR)

dhall/src/Dhall/Eval.hs

+4-4
Original file line numberDiff line numberDiff line change
@@ -787,7 +787,7 @@ eval !env t0 =
787787
VProject (eval env t) (Right e')
788788
Assert t ->
789789
VAssert (eval env t)
790-
Equivalent t u ->
790+
Equivalent _ t u ->
791791
VEquivalent (eval env t) (eval env u)
792792
With e₀ ks v ->
793793
vWith (eval env e₀) ks (eval env v)
@@ -1188,7 +1188,7 @@ quote !env !t0 =
11881188
VAssert t ->
11891189
Assert (quote env t)
11901190
VEquivalent t u ->
1191-
Equivalent (quote env t) (quote env u)
1191+
Equivalent mempty (quote env t) (quote env u)
11921192
VWith e ks v ->
11931193
With (quote env e) ks (quote env v)
11941194
VInject m k Nothing ->
@@ -1374,8 +1374,8 @@ alphaNormalize = goEnv EmptyNames
13741374
Project (go t) (fmap go ks)
13751375
Assert t ->
13761376
Assert (go t)
1377-
Equivalent t u ->
1378-
Equivalent (go t) (go u)
1377+
Equivalent cs t u ->
1378+
Equivalent cs (go t) (go u)
13791379
With e k v ->
13801380
With (go e) k (go v)
13811381
Note s e ->

dhall/src/Dhall/Normalize.hs

+3-3
Original file line numberDiff line numberDiff line change
@@ -668,11 +668,11 @@ normalizeWithM ctx e0 = loop (Syntax.denote e0)
668668
t' <- loop t
669669

670670
pure (Assert t')
671-
Equivalent l r -> do
671+
Equivalent cs l r -> do
672672
l' <- loop l
673673
r' <- loop r
674674

675-
pure (Equivalent l' r')
675+
pure (Equivalent cs l' r')
676676
With e ks v -> do
677677
e' <- loop e
678678
v' <- loop v
@@ -917,7 +917,7 @@ isNormalized e0 = loop (Syntax.denote e0)
917917
Record _ -> False
918918
_ -> loop e'
919919
Assert t -> loop t
920-
Equivalent l r -> loop l && loop r
920+
Equivalent _ l r -> loop l && loop r
921921
With{} -> False
922922
Note _ e' -> loop e'
923923
ImportAlt _ _ -> False

dhall/src/Dhall/Parser/Expression.hs

+2-2
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ parsers embedded = Parsers {..}
350350

351351
operatorParsers :: [Parser (Expr s a -> Expr s a -> Expr s a)]
352352
operatorParsers =
353-
[ Equivalent <$ _equivalent <* whitespace
353+
[ Equivalent . Just <$> _equivalent <* whitespace
354354
, ImportAlt <$ _importAlt <* nonemptyWhitespace
355355
, BoolOr <$ _or <* whitespace
356356
, NaturalPlus <$ _plus <* nonemptyWhitespace
@@ -359,7 +359,7 @@ parsers embedded = Parsers {..}
359359
, BoolAnd <$ _and <* whitespace
360360
, (\cs -> Combine (Just cs) Nothing) <$> _combine <* whitespace
361361
, (\cs -> Prefer (Just cs) PreferFromSource) <$> _prefer <* whitespace
362-
, (CombineTypes . Just) <$> _combineTypes <* whitespace
362+
, CombineTypes . Just <$> _combineTypes <* whitespace
363363
, NaturalTimes <$ _times <* whitespace
364364
-- Make sure that `==` is not actually the prefix of `===`
365365
, BoolEQ <$ try (_doubleEqual <* Text.Megaparsec.notFollowedBy (char '=')) <* whitespace

dhall/src/Dhall/Parser/Token.hs

+4-2
Original file line numberDiff line numberDiff line change
@@ -1207,8 +1207,10 @@ _at :: Parser ()
12071207
_at = reservedChar '@' <?> "\"@\""
12081208

12091209
-- | Parse the equivalence symbol (@===@ or @≡@)
1210-
_equivalent :: Parser ()
1211-
_equivalent = (void (char '' <?> "\"\"") <|> void (text "===")) <?> "operator"
1210+
_equivalent :: Parser CharacterSet
1211+
_equivalent =
1212+
(Unicode <$ char '' <?> "\"\"")
1213+
<|> (ASCII <$ text "===" <?> "===")
12121214

12131215
-- | Parse the @missing@ keyword
12141216
_missing :: Parser ()

dhall/src/Dhall/Pretty/Internal.hs

+3-2
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ detectCharacterSet = foldOf (cosmosOf subExpressions . to exprToCharacterSet)
153153
Combine (Just Unicode) _ _ _ -> Unicode
154154
CombineTypes (Just Unicode) _ _ -> Unicode
155155
Prefer (Just Unicode) _ _ _ -> Unicode
156+
Equivalent (Just Unicode) _ _ -> Unicode
156157
_ -> mempty
157158

158159
-- | Pretty print an expression
@@ -927,10 +928,10 @@ prettyPrinters characterSet =
927928
spacer = if Text.length op == 1 then " " else " "
928929

929930
prettyEquivalentExpression :: Pretty a => Expr Src a -> Doc Ann
930-
prettyEquivalentExpression a0@(Equivalent _ _) =
931+
prettyEquivalentExpression a0@(Equivalent _ _ _) =
931932
prettyOperator (equivalent characterSet) (docs a0)
932933
where
933-
docs (Equivalent a b) = prettyImportAltExpression b : docs a
934+
docs (Equivalent _ a b) = prettyImportAltExpression b : docs a
934935
docs a
935936
| Just doc <- preserveSource a =
936937
[ doc ]

dhall/src/Dhall/Syntax.hs

+10-9
Original file line numberDiff line numberDiff line change
@@ -440,10 +440,10 @@ data Expr s a
440440
-- | > Var (V x 0) ~ x
441441
-- > Var (V x n) ~ x@n
442442
| Var Var
443-
-- | > Lam (FunctionBinding _ "x" _ _ A) b ~ λ(x : A) -> b
443+
-- | > Lam _ (FunctionBinding _ "x" _ _ A) b ~ λ(x : A) -> b
444444
| Lam (Maybe CharacterSet) (FunctionBinding s a) (Expr s a)
445-
-- | > Pi "_" A B ~ A -> B
446-
-- > Pi x A B ~ ∀(x : A) -> B
445+
-- | > Pi _ "_" A B ~ A -> B
446+
-- > Pi _ x A B ~ ∀(x : A) -> B
447447
| Pi (Maybe CharacterSet) Text (Expr s a) (Expr s a)
448448
-- | > App f a ~ f a
449449
| App (Expr s a) (Expr s a)
@@ -581,7 +581,7 @@ data Expr s a
581581
| RecordLit (Map Text (RecordField s a))
582582
-- | > Union [(k1, Just t1), (k2, Nothing)] ~ < k1 : t1 | k2 >
583583
| Union (Map Text (Maybe (Expr s a)))
584-
-- | > Combine Nothing x y ~ x ∧ y
584+
-- | > Combine _ Nothing x y ~ x ∧ y
585585
--
586586
-- The first field is a `Just` when the `Combine` operator is introduced
587587
-- as a result of desugaring duplicate record fields:
@@ -592,9 +592,9 @@ data Expr s a
592592
-- > (Combine (Just k) x y)
593593
-- > )]
594594
| Combine (Maybe CharacterSet) (Maybe Text) (Expr s a) (Expr s a)
595-
-- | > CombineTypes x y ~ x ⩓ y
595+
-- | > CombineTypes _ x y ~ x ⩓ y
596596
| CombineTypes (Maybe CharacterSet) (Expr s a) (Expr s a)
597-
-- | > Prefer False x y ~ x ⫽ y
597+
-- | > Prefer _ False x y ~ x ⫽ y
598598
--
599599
-- The first field is a `True` when the `Prefer` operator is introduced as a
600600
-- result of desugaring a @with@ expression
@@ -614,8 +614,8 @@ data Expr s a
614614
| Project (Expr s a) (Either [Text] (Expr s a))
615615
-- | > Assert e ~ assert : e
616616
| Assert (Expr s a)
617-
-- | > Equivalent x y ~ x ≡ y
618-
| Equivalent (Expr s a) (Expr s a)
617+
-- | > Equivalent _ x y ~ x ≡ y
618+
| Equivalent (Maybe CharacterSet) (Expr s a) (Expr s a)
619619
-- | > With x y e ~ x with y = e
620620
| With (Expr s a) (NonEmpty Text) (Expr s a)
621621
-- | > Note s x ~ e
@@ -842,7 +842,7 @@ unsafeSubExpressions f (Merge a b t) = Merge <$> f a <*> f b <*> traverse f t
842842
unsafeSubExpressions f (ToMap a t) = ToMap <$> f a <*> traverse f t
843843
unsafeSubExpressions f (Project a b) = Project <$> f a <*> traverse f b
844844
unsafeSubExpressions f (Assert a) = Assert <$> f a
845-
unsafeSubExpressions f (Equivalent a b) = Equivalent <$> f a <*> f b
845+
unsafeSubExpressions f (Equivalent cs a b) = Equivalent cs <$> f a <*> f b
846846
unsafeSubExpressions f (With a b c) = With <$> f a <*> pure b <*> f c
847847
unsafeSubExpressions f (ImportAlt l r) = ImportAlt <$> f l <*> f r
848848
unsafeSubExpressions _ (Let {}) = unhandledConstructor "Let"
@@ -1138,6 +1138,7 @@ denote = \case
11381138
Lam _ a b -> Lam Nothing (denoteFunctionBinding a) (denote b)
11391139
Pi _ t a b -> Pi Nothing t (denote a) (denote b)
11401140
Field a (FieldSelection _ b _) -> Field (denote a) (FieldSelection Nothing b Nothing)
1141+
Equivalent _ a b -> Equivalent Nothing (denote a) (denote b)
11411142
expression -> Lens.over unsafeSubExpressions denote expression
11421143
where
11431144
denoteRecordField (RecordField _ e _ _) = RecordField Nothing (denote e) Nothing Nothing

dhall/src/Dhall/TypeCheck.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1225,7 +1225,7 @@ infer typer = loop
12251225
_ ->
12261226
die (NotAnEquivalence _T)
12271227

1228-
Equivalent x y -> do
1228+
Equivalent _ x y -> do
12291229
_A₀' <- loop ctx x
12301230

12311231
let _A₀'' = quote names _A₀'

0 commit comments

Comments
 (0)