packages feed

haskell-igraph-0.1.0: src/IGraph/Generators.hs

module IGraph.Generators
    ( ErdosRenyiModel(..)
    , erdosRenyiGame
    ) where

import IGraph
import IGraph.Mutable
import IGraph.Internal.Graph
import IGraph.Internal.Constants
import IGraph.Internal.Initialization

data ErdosRenyiModel = GNP
                     | GNM

erdosRenyiGame :: Graph d
               => ErdosRenyiModel
               -> Int   -- ^ n
               -> Double   -- ^ p or m
               -> d     -- ^ directed
               -> Bool  -- ^ self-loop
               -> IO (LGraph d () ())
erdosRenyiGame model n p_or_m d self = do
    gp <- igraphInit >> igraphErdosRenyiGame model' n p_or_m (isD d) self
    unsafeFreeze $ MLGraph gp
  where
    model' = case model of
        GNP -> IgraphErdosRenyiGnp
        GNM -> IgraphErdosRenyiGnm