eo-phi-normalizer 3.1.0 → 3.2.0
raw patch · 5 files changed
+70/−16 lines, 5 files
Files
- CHANGELOG.md +11/−1
- eo-phi-normalizer.cabal +1/−1
- src/Language/EO/Phi/Pretty.hs +2/−2
- src/Language/EO/Phi/Syntax.hs +14/−0
- test/eo/phi/from-eo/as-phi.yaml +42/−12
CHANGELOG.md view
@@ -6,7 +6,17 @@ and this project adheres to the [Haskell Package Versioning Policy](https://pvp.haskell.org/). -## v3.1.0 - 2024-12-28+## v3.2.0 - 2025-01-13++### Breaking changes++- Pretty-print constants ([#661](https://github.com/objectionary/eo-phi-normalizer/pull/661), [#662](https://github.com/objectionary/eo-phi-normalizer/pull/662))++### Documentation and maintenance++- chore(deps): update baptiste0928/cargo-install action to v3.3.0 ([#660](https://github.com/objectionary/eo-phi-normalizer/pull/660))++## v3.1.0 - 2025-01-01 ### Breaking changes
eo-phi-normalizer.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: eo-phi-normalizer-version: 3.1.0+version: 3.2.0 synopsis: Command line normalizer of 𝜑-calculus expressions. description: Please see the README on GitHub at <https://github.com/objectionary/eo-phi-normalizer#readme> homepage: https://github.com/objectionary/eo-phi-normalizer#readme
src/Language/EO/Phi/Pretty.hs view
@@ -69,7 +69,7 @@ pretty (Abs.DoubleSigned i) = pretty i instance Pretty Abs.StringRaw where- pretty (Abs.StringRaw i) = pretty i+ pretty (Abs.StringRaw i) = pretty (show i) instance Pretty Abs.Program where pretty = \case@@ -104,7 +104,7 @@ Abs.ThisObject -> pretty "ξ" Abs.Termination -> pretty "⊥" Abs.ConstStringRaw str -> pretty str- Abs.ConstString str -> pretty str+ Abs.ConstString str -> pretty (show str) Abs.ConstIntRaw integersigned -> pretty integersigned Abs.ConstFloatRaw doublesigned -> pretty doublesigned Abs.MetaSubstThis object1 object2 -> pretty object1 <+> lbracket <+> pretty "ξ ↦" <+> pretty object2 <+> rbracket
src/Language/EO/Phi/Syntax.hs view
@@ -25,6 +25,7 @@ {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE ViewPatterns #-}@@ -187,9 +188,19 @@ sugarFinally :: Program -> Program sugarFinally (Program bindings) = Program (sugarFinally bindings) +pattern SugarBinding :: Bytes -> Binding+pattern SugarBinding bs <- AlphaBinding "as-bytes" (Application "Φ.org.eolang.bytes" [AlphaBinding "α0" (Formation [DeltaBinding bs])])+ instance SugarableFinally Object where sugarFinally :: Object -> Object sugarFinally = \case+ Application "Φ.org.eolang.int" [SugarBinding bs] -> ConstInt (fromIntegral (bytesToInt bs))+ Application "Φ.org.eolang.i64" [SugarBinding bs] -> ConstInt (fromIntegral (bytesToInt bs))+ Application "Φ.org.eolang.i32" [SugarBinding bs] -> ConstInt (fromIntegral (bytesToInt bs))+ Application "Φ.org.eolang.i16" [SugarBinding bs] -> ConstInt (fromIntegral (bytesToInt bs))+ Application "Φ.org.eolang.float" [SugarBinding bs] -> ConstFloat (bytesToFloat bs)+ Application "Φ.org.eolang.number" [SugarBinding bs] -> ConstFloat (bytesToFloat bs)+ Application "Φ.org.eolang.string" [SugarBinding bs] -> ConstString (bytesToString bs) "Φ.org.eolang" -> GlobalObjectPhiOrg obj@ConstString{} -> obj obj@ConstStringRaw{} -> errorExpectedDesugaredObject obj@@ -684,3 +695,6 @@ printTree = printTreeDontSugar . sugarFinally++-- >>> bytesToInt "00-00-00-00-00-00-00-00"+-- 0
test/eo/phi/from-eo/as-phi.yaml view
@@ -24,9 +24,9 @@ tests: - name: "A program that prints itself" input: |- {⟦org ↦ ⟦eolang ↦ ⟦prints-itself ↦ ⟦φ ↦ Φ.org.eolang.as-phi(α0 ↦ ξ).length.gt(α0 ↦ Φ.org.eolang.int(α0 ↦ Φ.org.eolang.bytes(Δ ⤍ 00-00-00-00-00-00-00-00)))⟧, prints-itself-to-console ↦ ⟦x ↦ Φ.org.eolang.int(α0 ↦ Φ.org.eolang.bytes(Δ ⤍ 00-00-00-00-00-00-00-2A)), φ ↦ Φ.org.eolang.io.stdout(α0 ↦ Φ.org.eolang.as-phi(α0 ↦ ξ))⟧, λ ⤍ Package⟧, λ ⤍ Package⟧⟧}+ {⟦org ↦ ⟦eolang ↦ ⟦prints-itself ↦ ⟦φ ↦ Φ.org.eolang.as-phi(α0 ↦ ξ).length.gt(α0 ↦ Φ.org.eolang.int(as-bytes ↦ Φ.org.eolang.bytes(⟦ Δ ⤍ 00-00-00-00-00-00-00-00 ⟧)))⟧, prints-itself-to-console ↦ ⟦x ↦ Φ.org.eolang.int(as-bytes ↦ Φ.org.eolang.bytes(⟦ Δ ⤍ 00-00-00-00-00-00-00-2A ⟧)), φ ↦ Φ.org.eolang.io.stdout(α0 ↦ Φ.org.eolang.as-phi(α0 ↦ ξ))⟧, λ ⤍ Package⟧, λ ⤍ Package⟧⟧} normalized: |- { ⟦ org ↦ ⟦ eolang ↦ ⟦ prints-itself ↦ ⟦ φ ↦ Φ.org.eolang.as-phi (α0 ↦ ξ).length.gt (α0 ↦ Φ.org.eolang.int (α0 ↦ Φ.org.eolang.bytes (Δ ⤍ 00-00-00-00-00-00-00-00))) ⟧, prints-itself-to-console ↦ ⟦ x ↦ Φ.org.eolang.int (α0 ↦ Φ.org.eolang.bytes (Δ ⤍ 00-00-00-00-00-00-00-2A)), φ ↦ Φ.org.eolang.io.stdout (α0 ↦ Φ.org.eolang.as-phi (α0 ↦ ξ)) ⟧, λ ⤍ Package ⟧, λ ⤍ Package ⟧ ⟧ }+ { ⟦ org ↦ ⟦ eolang ↦ ⟦ prints-itself ↦ ⟦ φ ↦ Φ.org.eolang.as-phi (α0 ↦ ξ).length.gt (α0 ↦ Φ.org.eolang.int (as-bytes ↦ Φ.org.eolang.bytes (⟦ Δ ⤍ 00-00-00-00-00-00-00-00 ⟧))) ⟧, prints-itself-to-console ↦ ⟦ x ↦ Φ.org.eolang.int (as-bytes ↦ Φ.org.eolang.bytes (⟦ Δ ⤍ 00-00-00-00-00-00-00-2A ⟧)), φ ↦ Φ.org.eolang.io.stdout (α0 ↦ Φ.org.eolang.as-phi (α0 ↦ ξ)) ⟧, λ ⤍ Package ⟧, λ ⤍ Package ⟧ ⟧ } prettified: | { ⟦@@ -36,19 +36,11 @@ φ ↦ Φ̇.as-phi( ξ ).length.gt(- Φ̇.int(- Φ̇.bytes(- Δ ⤍ 00-00-00-00-00-00-00-00- )- )+ 0 ) ⟧, prints-itself-to-console ↦ ⟦- x ↦ Φ̇.int(- Φ̇.bytes(- Δ ⤍ 00-00-00-00-00-00-00-2A- )- ),+ x ↦ 42, φ ↦ Φ̇.io.stdout( Φ̇.as-phi( ξ@@ -72,5 +64,43 @@ m ↦ ⟦ x ↦ ⟦⟧ ⟧()+ ⟧+ }+ - name: "Prints abstraction sugar"+ input: |+ {⟦+ foo ↦ Φ.bar(+ α0 ↦ "hello",+ α1 ↦ "jeff",+ α2 ↦ 42+ )+ ⟧}+ normalized: |+ {⟦+ foo ↦ Φ.bar(+ "hello",+ "jeff",+ 42+ )+ ⟧}+ prettified: |+ {+ ⟦+ foo ↦ Φ.bar(+ "hello",+ "jeff",+ 42+ )+ ⟧+ }+ - name: "Prints floats"+ input: |+ {⟦ m ↦ -42.0 ⟧}+ normalized: |+ {⟦ m ↦ -42.0 ⟧}+ prettified: |+ {+ ⟦+ m ↦ -42.0 ⟧ }