2015-07-07 2 views
2

Я хочу создать функцию foo, которая получит функцию f и строку s. Функция применить функцию f к s и возвращает длину массива:Аннотировать параметр функции

let foo (f : (`a -> `b[])) (s : string) = 
      let attrs = f s 
      attrs.Length 

F # компилятор не знает, что все f функции возвращают массив что-то. Как я могу дать подсказку компилятору?

ответ

4

Насколько я могу видеть, единственная проблема с сниппета является то, что кавычка (` в вашем родовом имени типа) должно быть только одна цитата:

let foo (f : ('a -> 'b[])) (s : string) = 
    let attrs = f s 
    attrs.Length 

Существует еще один маленький вопрос, который что вызов f с s в качестве аргумента ограничивает тип 'a - string, но это отдельный вопрос.

+0

Также, чтобы избежать «менее общего», вы можете использовать '' a' type вместо 'string' – Petr

Смежные вопросы