graph-rewriting-ski 0.5.2 → 0.5.4
raw patch · 3 files changed
+63/−66 lines, 3 files
Files
- Direct/Graph.hs +26/−36
- Direct/Rules.hs +7/−2
- graph-rewriting-ski.cabal +30/−28
Direct/Graph.hs view
@@ -3,52 +3,42 @@ import Data.View import GraphRewriting.Graph import GraphRewriting.Graph.Write-import GraphRewriting.Pattern.InteractionNet import qualified Common.Term as Term -- <chunk: node_type> data SKI- = S {inp ∷ Port}- | K {inp ∷ Port}- | I {inp ∷ Port}- | Applicator {inp, out1, out2 ∷ Port}- | Duplicator {inp1, inp2, out ∷ Port}- | Eraser {inp ∷ Port}- | Variable {inp ∷ Port, name ∷ String}- | Root {out ∷ Port}+ = S {inp ∷ Port}+ | K {inp ∷ Port}+ | I {inp ∷ Port}+ | Applicator {inp, out1, out2 ∷ Port}+ | Duplicator {inp1, inp2, out ∷ Port}+ | Eraser {inp ∷ Port}+ | Variable {inp ∷ Port, name ∷ String}+ | Root {out ∷ Port} -- </chunk: node_type> +-- <chunk: view_ports> instance View [Port] SKI where inspect ski = case ski of- S {inp = i} → [i]- K {inp = i} → [i]- I {inp = i} → [i]- Applicator {inp = i, out1 = o1, out2 = o2} → [i,o1,o2]- Duplicator {inp1 = i1, inp2 = i2, out = o} → [i1,i2,o]- Eraser {inp = i} → [i]- Variable {inp = i} → [i]- Root {out = o} → [o]+ S {inp = i} → [i]+ K {inp = i} → [i]+ I {inp = i} → [i]+ Applicator {inp = i, out1 = o1, out2 = o2} → [i,o1,o2]+ Duplicator {inp1 = i1, inp2 = i2, out = o} → [i1,i2,o]+ Eraser {inp = i} → [i]+ Variable {inp = i} → [i]+ Root {out = o} → [o] update ports ski = case ski of- S {} → ski {inp = i} where [i] = ports- K {} → ski {inp = i} where [i] = ports- I {} → ski {inp = i} where [i] = ports- Applicator {} → ski {inp = i, out1 = o1, out2 = o2} where [i,o1,o2] = ports- Duplicator {} → ski {inp1 = i1, inp2 = i2, out = o} where [i1,i2,o] = ports- Eraser {} → ski {inp = i} where [i] = ports- Variable {} → ski {inp = i} where [i] = ports- Root {} → ski {out = o} where [o] = ports--instance INet SKI where- principalPort ski = case ski of- Root {out = o} → 0- Applicator {inp = i, out1 = o1, out2 = o2} → 1- Duplicator {inp1 = i1, inp2 = i2, out = o} → 2- Eraser {inp = i} → 0- Variable {inp = i} → 0- S {inp = i} → 0- K {inp = i} → 0- I {inp = i} → 0+ S {} → ski {inp = i} where [i] = ports+ K {} → ski {inp = i} where [i] = ports+ I {} → ski {inp = i} where [i] = ports+ Applicator {} → ski {inp = i, out1 = o1, out2 = o2} where [i,o1,o2] = ports+ Duplicator {} → ski {inp1 = i1, inp2 = i2, out = o} where [i1,i2,o] = ports+ Eraser {} → ski {inp = i} where [i] = ports+ Variable {} → ski {inp = i} where [i] = ports+ Root {} → ski {out = o} where [o] = ports+-- </chunk: view_ports> fromTerm ∷ Term.Expr → Graph SKI fromTerm term = flip execGraph emptyGraph $ do
Direct/Rules.hs view
@@ -3,9 +3,9 @@ import Prelude.Unicode import Direct.Graph import GraphRewriting-import GraphRewriting.Pattern.InteractionNet +-- <chunk: rules> ruleS ∷ (View [Port] n, View SKI n) ⇒ Rule n ruleS = do S {inp = si} ← node@@ -21,6 +21,7 @@ Node $ Applicator {inp = r, out1 = g, out2 = rr}, Node $ Duplicator {inp1 = lr, inp2 = rr, out = x}] +-- <chunk: ruleK> ruleK ∷ (View [Port] n, View SKI n) ⇒ Rule n ruleK = do K {inp = si} ← node@@ -29,10 +30,13 @@ Applicator {inp = i2, out1 = o2, out2 = y} ← nodeAt i1 require (i1 ≡ o2) replace0 [Wire x i2, Node $ Eraser {inp = y}]+-- </chunk: ruleK> ruleI ∷ (View [Port] n, View SKI n) ⇒ Rule n ruleI = do- I {} :-: Applicator {inp = iA, out2 = o2} ← activePair+ I {inp = iI} ← node+ Applicator {inp = iA, out2 = o2} ← nodeAt iI+ require (iI ≡ iA) rewire [[iA,o2]] combinatorAt ∷ (View [Port] n, View SKI n) ⇒ Edge → Pattern n SKI@@ -77,3 +81,4 @@ if iE ≡ i1 then rewire [[oD,i2]] else rewire [[oD,i1]]+-- <chunk: rules>
graph-rewriting-ski.cabal view
@@ -1,5 +1,5 @@ Name: graph-rewriting-ski-Version: 0.5.2+Version: 0.5.4 Copyright: (c) 2010, Jan Rochel License: BSD3 License-File: LICENSE@@ -13,32 +13,34 @@ Category: Graphs, Application Cabal-Version: >= 1.6 Data-Files: examples/*.ski examples/combinator_birds/*.ski-Build-Depends:- base >= 4 && < 4.3,- base-unicode-symbols >= 0.2 && < 0.3,- graph-rewriting >= 0.4.4 && < 0.5,- graph-rewriting-layout >= 0.4.2 && < 0.5,- graph-rewriting-gl >= 0.6 && < 0.7,- parsec >= 2.1 && < 2.2,- GLUT >= 2.2 && < 2.3,- OpenGL >= 2.4 && < 2.5 -Executable: ski-inet-Main-Is: INet/Main.hs-GHC-Options: -fno-warn-duplicate-exports -fwarn-unused-imports-Other-Modules: Common.GL INet.GL INet.Graph INet.Rules Common.Term-Extensions:- UnicodeSyntax- FlexibleInstances- FlexibleContexts- MultiParamTypeClasses+Library+ Build-Depends:+ base >= 4 && < 4.3,+ base-unicode-symbols >= 0.2 && < 0.3,+ graph-rewriting >= 0.4.4 && < 0.5,+ graph-rewriting-layout >= 0.4.2 && < 0.5,+ graph-rewriting-gl >= 0.6 && < 0.7,+ parsec >= 2.1 && < 2.2,+ GLUT >= 2.2 && < 2.3,+ OpenGL >= 2.4 && < 2.5 -Executable: ski-direct-Main-Is: Direct/Main.hs-GHC-Options: -fno-warn-duplicate-exports -fwarn-unused-imports-Other-Modules: Common.GL Direct.GL Direct.Graph Direct.Rules Common.Term-Extensions:- UnicodeSyntax- FlexibleInstances- FlexibleContexts- MultiParamTypeClasses+Executable ski-inet+ Main-Is: INet/Main.hs+ GHC-Options: -fno-warn-duplicate-exports -fwarn-unused-imports+ Other-Modules: Common.GL INet.GL INet.Graph INet.Rules Common.Term+ Extensions:+ UnicodeSyntax+ FlexibleInstances+ FlexibleContexts+ MultiParamTypeClasses++Executable ski-direct+ Main-Is: Direct/Main.hs+ GHC-Options: -fno-warn-duplicate-exports -fwarn-unused-imports+ Other-Modules: Common.GL Direct.GL Direct.Graph Direct.Rules Common.Term+ Extensions:+ UnicodeSyntax+ FlexibleInstances+ FlexibleContexts+ MultiParamTypeClasses