packages feed

open-witness-0.4.0.1: test/Object.hs

module Object where
{
    import Data.Witness;
    import Data.OpenWitness;

    data Object s = forall a. MkObject (OpenWitness s a) a;

    matchObject :: OpenWitness s b -> Object s -> Maybe b;
    matchObject uqb (MkObject uqa a) = do
    {
        Refl <- testEquality uqa uqb;
        return a;
    };

    makeConversions :: OpenWitness s b -> (b -> Object s,Object s -> Maybe b);
    makeConversions wit = (MkObject wit,matchObject wit);

    getConversions :: OW s (b -> Object s,Object s -> Maybe b);
    getConversions = do
    {
        wit <- newOpenWitnessOW;
        return (makeConversions wit);
    };
}