Есть функция
public variant SplittedExpr
{
| SimpleExpr {val : string;}
| InnerExpr {val : list[SplittedExpr];}
}
def getInnerText(x: SplittedExpr.InnerExpr): string
{
when (x.val.Length == 0)
return "";
when (
! x.val.Exists(
y =>
match (y)
{
| SplittedExpr.InnerExpr => true
| SplittedExpr.SimpleExpr => false
}
|| (y :> SplittedExpr.SimpleExpr).val.Length > 0
)
)
return "";
/*if (x.val.Length == 1)
innerLine(x.val) // не делаем скобок, если в них только один элемент
else*/
"\r\n" + tabs + "(\r\n" + innerLine(x.val) + "\r\n" + tabs + ")"
}
Компилируется нормально
Теперь меняю одну строку в match (выделил жирным)
def getInnerText(x: SplittedExpr.InnerExpr): string
{
when (x.val.Length == 0)
return "";
when (
! x.val.Exists(
y =>
match (y)
{
| SplittedExpr.InnerExpr => true
| _ => false
}
|| (y :> SplittedExpr.SimpleExpr).val.Length > 0
)
)
return "";
"\r\n" + tabs + "(\r\n" + innerLine(x.val) + "\r\n" + tabs + ")"
}
Получаю на строке чуть ниже (y :> SplittedExpr.SimpleExpr).val.Length > 0
следующую ошибку
DumpAst\DumpContext\Macro1.n(54,53): error :
cannot convert DumpContext.PrintDumpImpl.SplittedExpr.InnerExpr to DumpContext.PrintDumpImpl.SplittedExpr.SimpleExpr