public void BuildSubstitution_TagsToDoubleTagsToPDouble_ShouldUnify()
        {
            var biggerType       = new Curry(Typs.Tags, Typs.Double);
            var smallerType      = new Curry(Typs.Tags, Typs.PDouble);
            var unificationTable = biggerType.UnificationTable(smallerType);

            Assert.NotNull(unificationTable);
            unificationTable = smallerType.UnificationTable(biggerType);
            Assert.Null(unificationTable);
        }
        public void BuildSubstitution_DoubleToStringPDoubleToString_ShouldUnify()
        {
            var biggerType  = new Curry(Typs.PDouble, Typs.Bool);
            var smallerType = new Curry(Typs.Double, Typs.Bool);
            // We expect something that is able to handle PDoubles, but it is able to handle the wider doubles - should be fine
            var unificationTable = biggerType.UnificationTable(smallerType);

            Assert.NotNull(unificationTable);
            unificationTable = smallerType.UnificationTable(biggerType);
            Assert.Null(unificationTable);
        }
        public void BuildSubstitution_TagsToStringTagsToBool_ShouldUnify()
        {
            var biggerType  = new Curry(Typs.Tags, Typs.String);
            var smallerType = new Curry(Typs.Tags, Typs.Bool);
            // The expected type (biggerType) on the left, the argument type on the right (as it should be)
            var unificationTable = biggerType.UnificationTable(smallerType);

            Assert.NotNull(unificationTable);
            unificationTable = smallerType.UnificationTable(biggerType);
            Assert.Null(unificationTable);
        }