fcf-graphs-0.0.1.0: Type-level version of algebraic-graphs.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Fcf.Data.Graph

Synopsis

Documentation

data Graph a where Source #

Constructors

Empty :: Graph a 
Vertex :: a -> Graph a 
Overlay :: Graph a -> Graph a -> Graph a 
Connect :: Graph a -> Graph a -> Graph a 

Instances

Instances details
type Eval (Empty :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Empty :: Graph a -> Type) = 'Empty :: Graph a
type Eval (Vertex a2 :: Graph a1 -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Vertex a2 :: Graph a1 -> Type) = 'Vertex a2
type Eval (Simplify x :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Simplify x :: Graph a -> Type) = Eval (FoldG (Empty :: Graph a -> Type) (Vertex :: a -> Graph a -> Type) (Simple (Overlay :: Graph a -> Graph a -> Graph a -> Type)) (Simple (Connect :: Graph a -> Graph a -> Graph a -> Type)) x)
type Eval (Edge x y :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Edge x y :: Graph a -> Type) = 'Connect ('Vertex x) ('Vertex y)
type Eval (Overlay x y :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Overlay x y :: Graph a -> Type) = 'Overlay x y
type Eval (Connect x y :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Connect x y :: Graph a -> Type) = 'Connect x y
type Eval (Map f ('Connect x y) :: Graph b -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Map f ('Connect x y) :: Graph b -> Type) = 'Connect (Eval (Map f x)) (Eval (Map f y))
type Eval (Map f ('Overlay x y) :: Graph b -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Map f ('Overlay x y) :: Graph b -> Type) = 'Overlay (Eval (Map f x)) (Eval (Map f y))
type Eval (Map f ('Vertex a3) :: Graph a2 -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Map f ('Vertex a3) :: Graph a2 -> Type) = 'Vertex (Eval (f $ a3))
type Eval (Map _1 ('Empty :: Graph a) :: Graph b -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Map _1 ('Empty :: Graph a) :: Graph b -> Type) = 'Empty :: Graph b
type Eval (Simple' x y z :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Simple' x y z :: Graph a -> Type) = If (Eval (EqR x z)) x (If (Eval (EqR y z)) y z)
type Eval (Simple f x y :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Simple f x y :: Graph a -> Type) = Eval (Simple' x y (Eval (f x y)))

data Empty :: Exp (Graph a) Source #

Empty

Example

Expand
>>> :kind! (Eval Empty :: Graph Nat)
(Eval Empty :: Graph Nat) :: Graph Nat
= 'Empty

Instances

Instances details
type Eval (Empty :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Empty :: Graph a -> Type) = 'Empty :: Graph a

data Vertex :: a -> Exp (Graph a) Source #

Vertex

Example

Expand
>>> :kind! (Eval (Vertex 1) :: Graph Nat)
(Eval (Vertex 1) :: Graph Nat) :: Graph Nat
= 'Vertex 1

Instances

Instances details
type Eval (Vertex a2 :: Graph a1 -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Vertex a2 :: Graph a1 -> Type) = 'Vertex a2

data Edge :: a -> a -> Exp (Graph a) Source #

Edge

Example

Expand
>>> :kind! (Eval (Edge 1 2) :: Graph Nat)
(Eval (Edge 1 2) :: Graph Nat) :: Graph Nat
= 'Connect ('Vertex 1) ('Vertex 2)

Instances

Instances details
type Eval (Edge x y :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Edge x y :: Graph a -> Type) = 'Connect ('Vertex x) ('Vertex y)

data Overlay :: Graph a -> Graph a -> Exp (Graph a) Source #

Overlay

Example

Expand
>>> :kind! (Eval (Overlay ('Vertex 1) ('Vertex 2)) :: Graph Nat)
(Eval (Overlay ('Vertex 1) ('Vertex 2)) :: Graph Nat) :: Graph Nat
= 'Overlay ('Vertex 1) ('Vertex 2)

Instances

Instances details
type Eval (Overlay x y :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Overlay x y :: Graph a -> Type) = 'Overlay x y

data Connect :: Graph a -> Graph a -> Exp (Graph a) Source #

Connect

Example

Expand
>>> :kind! (Eval (Connect ('Vertex 1) ('Vertex 2)) :: Graph Nat)
(Eval (Connect ('Vertex 1) ('Vertex 2)) :: Graph Nat) :: Graph Nat
= 'Connect ('Vertex 1) ('Vertex 2)

Instances

Instances details
type Eval (Connect x y :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Connect x y :: Graph a -> Type) = 'Connect x y

data Map :: (a -> Exp b) -> Graph a -> Exp (Graph b) Source #

Map

Example

Expand
>>> :kind! Eval (Map ((+) 1) =<< Connect ('Overlay ('Vertex 1) ('Vertex 2)) ('Vertex 3))
Eval (Map ((+) 1) =<< Connect ('Overlay ('Vertex 1) ('Vertex 2)) ('Vertex 3)) :: Graph
                                                                                   Nat
= 'Connect ('Overlay ('Vertex 2) ('Vertex 3)) ('Vertex 4)

Instances

Instances details
type Eval (Map f ('Connect x y) :: Graph b -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Map f ('Connect x y) :: Graph b -> Type) = 'Connect (Eval (Map f x)) (Eval (Map f y))
type Eval (Map f ('Overlay x y) :: Graph b -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Map f ('Overlay x y) :: Graph b -> Type) = 'Overlay (Eval (Map f x)) (Eval (Map f y))
type Eval (Map f ('Vertex a3) :: Graph a2 -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Map f ('Vertex a3) :: Graph a2 -> Type) = 'Vertex (Eval (f $ a3))
type Eval (Map _1 ('Empty :: Graph a) :: Graph b -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Map _1 ('Empty :: Graph a) :: Graph b -> Type) = 'Empty :: Graph b

data FoldG :: Exp b -> (a -> Exp b) -> (b -> b -> Exp b) -> (b -> b -> Exp b) -> Graph a -> Exp b Source #

Foldg

Example

Expand
>>> :kind! Eval (FoldG (Pure 0) Pure (+) (+) =<< Connect ('Overlay ('Vertex 1) ('Vertex 2)) ('Vertex 3))
Eval (FoldG (Pure 0) Pure (+) (+) =<< Connect ('Overlay ('Vertex 1) ('Vertex 2)) ('Vertex 3)) :: Nat
= 6

Instances

Instances details
type Eval (FoldG e v o c ('Connect x y) :: a1 -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (FoldG e v o c ('Connect x y) :: a1 -> Type) = Eval (c (Eval (FoldG e v o c x)) (Eval (FoldG e v o c y)))
type Eval (FoldG e v o c ('Overlay x y) :: a1 -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (FoldG e v o c ('Overlay x y) :: a1 -> Type) = Eval (o (Eval (FoldG e v o c x)) (Eval (FoldG e v o c y)))
type Eval (FoldG _1 v _2 _3 ('Vertex x) :: a1 -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (FoldG _1 v _2 _3 ('Vertex x) :: a1 -> Type) = Eval (v x)
type Eval (FoldG e _1 _2 _3 ('Empty :: Graph a2) :: a1 -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (FoldG e _1 _2 _3 ('Empty :: Graph a2) :: a1 -> Type) = Eval e

data ToAdjacencyMap :: Graph a -> Exp (AdjacencyMap a) Source #

ToAdjacencyMap

Example

Expand
>>> :kind! Eval (ToAdjacencyMap (Eval (Edge 1 2)))
Eval (ToAdjacencyMap (Eval (Edge 1 2))) :: AM.AdjacencyMap Nat
= 'AM.AM
    ('Fcf.Data.MapC.MapC '[ '(1, 'S.Set '[2]), '(2, 'S.Set '[])])

Instances

Instances details
type Eval (ToAdjacencyMap x :: AdjacencyMap a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

data EqR :: Graph a -> Graph a -> Exp Bool Source #

EqR

Example

Expand
>>> :kind! Eval (EqR (Eval (Edge 1 3)) (Eval (Edge 1 2)))
Eval (EqR (Eval (Edge 1 3)) (Eval (Edge 1 2))) :: Bool
= 'False

Instances

Instances details
type Eval (EqR x y :: Bool -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (EqR x y :: Bool -> Type) = Eval (TyEq (Eval (ToAdjacencyMap x)) (Eval (ToAdjacencyMap y)))

data Size :: Graph a -> Exp Nat Source #

Size

Example

Expand
>>> :kind! Eval (Size =<< Connect ('Overlay ('Vertex 1) ('Vertex 2)) ('Vertex 3))
Eval (Size =<< Connect ('Overlay ('Vertex 1) ('Vertex 2)) ('Vertex 3)) :: Nat
= 3

Instances

Instances details
type Eval (Size g :: Nat -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Size g :: Nat -> Type) = Eval (FoldG (Pure 1) (ConstFn 1 :: a -> Nat -> Type) (+) (+) g)

data HasVertex :: a -> Graph a -> Exp Bool Source #

HasVertex

Example

Expand
>>> :kind! Eval (HasVertex 3 =<< Connect ('Overlay ('Vertex 1) ('Vertex 2)) ('Vertex 3))
Eval (HasVertex 3 =<< Connect ('Overlay ('Vertex 1) ('Vertex 2)) ('Vertex 3)) :: Bool
= 'True

Instances

Instances details
type Eval (HasVertex x g :: Bool -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (HasVertex x g :: Bool -> Type) = Eval (FoldG (Pure 'False) (TyEq x :: a -> Bool -> Type) (||) (||) g)

data VertexSet :: Graph a -> Exp (Set a) Source #

VertexSet

Example

Expand
>>> :kind! Eval (VertexSet =<< Connect ('Overlay ('Vertex 1) ('Vertex 2)) ('Vertex 3))
Eval (VertexSet =<< Connect ('Overlay ('Vertex 1) ('Vertex 2)) ('Vertex 3)) :: S.Set
                                                                                 Nat
= 'S.Set '[3, 2, 1]

Instances

Instances details
type Eval (VertexSet g :: Set v -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (VertexSet g :: Set v -> Type) = Eval (FoldG (Empty :: Set v -> Type) (Singleton :: v -> Set v -> Type) (Union :: Set v -> Set v -> Set v -> Type) (Union :: Set v -> Set v -> Set v -> Type) g)

data Simplify :: Graph a -> Exp (Graph a) Source #

Simplify

Example

Expand
>>> :kind! Eval (Simplify =<< Overlay ('Vertex 1) ('Overlay ('Vertex 2) ('Vertex 1)))
Eval (Simplify =<< Overlay ('Vertex 1) ('Overlay ('Vertex 2) ('Vertex 1))) :: Graph
                                                                                Nat
= 'Overlay ('Vertex 2) ('Vertex 1)

Instances

Instances details
type Eval (Simplify x :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Simplify x :: Graph a -> Type) = Eval (FoldG (Empty :: Graph a -> Type) (Vertex :: a -> Graph a -> Type) (Simple (Overlay :: Graph a -> Graph a -> Graph a -> Type)) (Simple (Connect :: Graph a -> Graph a -> Graph a -> Type)) x)

data Simple :: (Graph a -> Graph a -> Exp (Graph a)) -> Graph a -> Graph a -> Exp (Graph a) Source #

Instances

Instances details
type Eval (Simple f x y :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Simple f x y :: Graph a -> Type) = Eval (Simple' x y (Eval (f x y)))

data Simple' :: Graph a -> Graph a -> Graph a -> Exp (Graph a) Source #

Instances

Instances details
type Eval (Simple' x y z :: Graph a -> Type) Source # 
Instance details

Defined in Fcf.Data.Graph

type Eval (Simple' x y z :: Graph a -> Type) = If (Eval (EqR x z)) x (If (Eval (EqR y z)) y z)