P/T Nets em Haskell
Considere a seguinte classe do Haskell que especifica uma rede P/T.
{-# OPTIONS -fglasgow-exts #-}
module PTNet where
import Data.Set
import Data.Map
class (Eq p, Show p, Eq t, Show t) => PTNet n p t where
places :: n p t -> Set p
trans :: n p t -> Set t
pre :: n p t -> Map (p,t) Int
pos :: n p t -> Map (t,p) Int
capacity :: n p t -> Map p Int
initial :: n p t -> Map p Int
Os tipos de dados Set e Map implementam, respectivamente, conjuntos e funções finitas e fazem parte das bibliotecas hierárquicas do GHC.
Neste projecto pretende-se que desenvolva uma implementação de referência deste tipo de dados, e uma pequena biblioteca para análise e manipulação de redes. Esta biblioteca deve incluir no mínimo funções genéricas para calcular o grafo de acessibilidade e os invariantes de lugar. O grafo de acessibilidade deve ser implementado usando a biblioteca Data.Graph.Inductive distribuida com o GHC, por forma a aproveitar as suas potencialidades de geração de layouts para a ferramenta Graphviz de visualização de grafos.
Para permitir a interligação com a ferramenta DaNAMiCS também deve ser desenvolvido um parser que interprete os ficheiros com extensão bim.