relation-0.2: Examples/T02_Relation.hs
-- | Leonel Fonseca. 2010/nov/14.
-- Test module showing how to use Data.Relation.
module T02_Relation where
import Data.Relation
import qualified Data.Set as S
-- | Para estar en la relación lleva
-- - Un estudiante lleva al menos una materia.
-- - Una materia al menos es llevada por un estudiante.
lleva = fromList
[ ("Rebeca" , "Historia" )
, ("Rebeca" , "Matemática" )
, ("Rolando", "Religión" )
, ("Rolando", "Comunicación")
, ("Teresa" , "Religión" )
, ("Teresa" , "Arquitectura")
, ("Antonio", "Historia" )
]
rebecaLleva = (S.singleton "Rebeca" |$> ran lleva) lleva
llevanReligión = (dom lleva <$| S.singleton "Religión") lleva
-- otros cursos para aquellos que llevan Religión
otros = (llevanReligión |$> ran lleva) lleva
prueba1 = (llevanReligión <$| ran lleva) lleva == llevanReligión
-- Explorando |>
llevanReligión2 = lleva |> S.singleton "Religión"
identidad1 s = ( v1 == v2, v1 )
where
v1 = (dom lleva |$> s) lleva
v2 = ran (lleva |> s)
identidad2 s = ( v1 == v2, v1 )
where
v1 = (dom lleva <$| s) lleva
v2 = dom (lleva |> s)
-- Explorando <|
identidad3 s = ( v1 == v2, v1 )
where
v1 = (s <$| ran lleva) lleva
v2 = dom (s <| lleva)
identidad4 s = ( v1 == v2, v2 )
where
v1 = (s |$> ran lleva) lleva
v2 = ran (s <| lleva)
religión = S.singleton "Religión"
t11 = identidad1 religión
t12 = identidad2 religión
teresa = S.singleton "Teresa"
t13 = identidad3 teresa
t14 = identidad4 teresa
identidad1R, identidad2R
:: (Ord a, Ord b) => S.Set b -> Relación a b -> Bool
identidad3R , identidad4R
:: (Ord a, Ord b) => S.Set a -> Relación a b -> Bool
identidad1R s r = (dom r |$> s) r == ran (r |> s)
identidad2R s r = (dom r <$| s) r == dom (r |> s)
identidad3R s r = (s <$| ran r) r == dom (s <| r)
identidad4R s r = (s |$> ran r) r == ran (s <| r)
probarTodas = all id [ identidad1R religión lleva
, identidad2R religión lleva
, identidad3R teresa lleva
, identidad4R teresa lleva
]