{-# LANGUAGE TypeFamilies #-}
module Algebra.Graph.Labelled.Example.Network where
import Algebra.Graph.Labelled
data City = Aberdeen
| Edinburgh
| Glasgow
| London
| Newcastle
deriving (City
City -> City -> Bounded City
forall a. a -> a -> Bounded a
$cminBound :: City
minBound :: City
$cmaxBound :: City
maxBound :: City
Bounded, Int -> City
City -> Int
City -> [City]
City -> City
City -> City -> [City]
City -> City -> City -> [City]
(City -> City)
-> (City -> City)
-> (Int -> City)
-> (City -> Int)
-> (City -> [City])
-> (City -> City -> [City])
-> (City -> City -> [City])
-> (City -> City -> City -> [City])
-> Enum City
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: City -> City
succ :: City -> City
$cpred :: City -> City
pred :: City -> City
$ctoEnum :: Int -> City
toEnum :: Int -> City
$cfromEnum :: City -> Int
fromEnum :: City -> Int
$cenumFrom :: City -> [City]
enumFrom :: City -> [City]
$cenumFromThen :: City -> City -> [City]
enumFromThen :: City -> City -> [City]
$cenumFromTo :: City -> City -> [City]
enumFromTo :: City -> City -> [City]
$cenumFromThenTo :: City -> City -> City -> [City]
enumFromThenTo :: City -> City -> City -> [City]
Enum, City -> City -> Bool
(City -> City -> Bool) -> (City -> City -> Bool) -> Eq City
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: City -> City -> Bool
== :: City -> City -> Bool
$c/= :: City -> City -> Bool
/= :: City -> City -> Bool
Eq, Eq City
Eq City =>
(City -> City -> Ordering)
-> (City -> City -> Bool)
-> (City -> City -> Bool)
-> (City -> City -> Bool)
-> (City -> City -> Bool)
-> (City -> City -> City)
-> (City -> City -> City)
-> Ord City
City -> City -> Bool
City -> City -> Ordering
City -> City -> City
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: City -> City -> Ordering
compare :: City -> City -> Ordering
$c< :: City -> City -> Bool
< :: City -> City -> Bool
$c<= :: City -> City -> Bool
<= :: City -> City -> Bool
$c> :: City -> City -> Bool
> :: City -> City -> Bool
$c>= :: City -> City -> Bool
>= :: City -> City -> Bool
$cmax :: City -> City -> City
max :: City -> City -> City
$cmin :: City -> City -> City
min :: City -> City -> City
Ord, Int -> City -> ShowS
[City] -> ShowS
City -> String
(Int -> City -> ShowS)
-> (City -> String) -> ([City] -> ShowS) -> Show City
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> City -> ShowS
showsPrec :: Int -> City -> ShowS
$cshow :: City -> String
show :: City -> String
$cshowList :: [City] -> ShowS
showList :: [City] -> ShowS
Show)
type JourneyTime = Int
eastCoast :: Network JourneyTime City
eastCoast :: Network Int City
eastCoast = [Network Int City] -> Network Int City
forall e a. Monoid e => [Graph e a] -> Graph e a
overlays [ City
Aberdeen City -> Distance Int -> (City, Distance Int)
forall a e. a -> e -> (a, e)
-<Distance Int
150(City, Distance Int) -> City -> Network Int City
forall a e. (a, e) -> a -> Graph e a
>- City
Edinburgh
, City
Edinburgh City -> Distance Int -> (City, Distance Int)
forall a e. a -> e -> (a, e)
-< Distance Int
90(City, Distance Int) -> City -> Network Int City
forall a e. (a, e) -> a -> Graph e a
>- City
Newcastle
, City
Newcastle City -> Distance Int -> (City, Distance Int)
forall a e. a -> e -> (a, e)
-<Distance Int
170(City, Distance Int) -> City -> Network Int City
forall a e. (a, e) -> a -> Graph e a
>- City
London ]
scotRail :: Network JourneyTime City
scotRail :: Network Int City
scotRail = [Network Int City] -> Network Int City
forall e a. Monoid e => [Graph e a] -> Graph e a
overlays [ City
Aberdeen City -> Distance Int -> (City, Distance Int)
forall a e. a -> e -> (a, e)
-<Distance Int
140(City, Distance Int) -> City -> Network Int City
forall a e. (a, e) -> a -> Graph e a
>- City
Edinburgh
, City
Edinburgh City -> Distance Int -> (City, Distance Int)
forall a e. a -> e -> (a, e)
-< Distance Int
50(City, Distance Int) -> City -> Network Int City
forall a e. (a, e) -> a -> Graph e a
>- City
Glasgow
, City
Edinburgh City -> Distance Int -> (City, Distance Int)
forall a e. a -> e -> (a, e)
-< Distance Int
70(City, Distance Int) -> City -> Network Int City
forall a e. (a, e) -> a -> Graph e a
>- City
Glasgow ]
network :: Network JourneyTime City
network :: Network Int City
network = Network Int City -> Network Int City -> Network Int City
forall e a. Monoid e => Graph e a -> Graph e a -> Graph e a
overlay Network Int City
scotRail Network Int City
eastCoast