Функция возвращает строку, когда ожидается bool

Что не так с этим фрагментом кода?

fun expd s:string = if size(s) > 0 then true else false;

Ошибка, которую я получаю:

- fun exnd s:string = if size(s) > a then true else false;
stdIn:657.1-837.8 Error: unbound variable or constructor: a
Error: right-hand-side of clause doesn't agree with function result type [tycon mismatch]
  expression:  bool
  result type: string

Почему это происходит?

1 ответ

Решение

Вам нужны круглые скобки s:stringпотому что сейчас string интерпретируется как тип вывода функции, а не тип параметра s:

fun expd (s:string) = if size(s) > 0 then true else false

Кстати, компилятор может выводить все типы здесь без каких-либо аннотаций типов. Попробуйте следующее:

fun expd s = if size(s) > 0 then true else false

И, конечно, вы можете упростить это определение в:

fun expd s = size(s) > 0
Другие вопросы по тегам