fgl icon indicating copy to clipboard operation
fgl copied to clipboard

Custom graph invariants

Open JeffreyBenjaminBrown opened this issue 7 years ago • 1 comments

Is there a some canonical way to enforce graph invariants in FGL?

I have been using FGL to implement a generalization of graphs that allows for arbitrary arity and nesting of relationships. It looks like this:

type RSLT = Gr Expr Role
data Expr = Word String
          | Template [String] -- e.g. "_ needs _ to _"
          | Relationship      -- e.g. "Gotham needs Batman to hurry"
data Role = TemplateRole | Member Int

Words and Templates emit no edges. Each Relationship emits an edge labeled "TemplateRole" to a Template of arity k, and k more edges, labeled "Member i" for i in [1,k]. Thus the model permits lots of invalid state.

I don't know whether it's relevant, but I just learned about the dependent map library, which implements a map that allows keys to specify the types of values associated with them.

JeffreyBenjaminBrown avatar Aug 15 '17 18:08 JeffreyBenjaminBrown

There's no way to constrain in FGL which edges are legal.

It may be possible to implement a new FGL type using dependent-maps, but I'm hesitant to add any extra dependencies as it's part of the Haskell Platform.

ivan-m avatar Aug 15 '17 22:08 ivan-m