Свернуть создание типа опции - PullRequest
1 голос
/ 13 сентября 2011

Если указать значение функции как:

let applyFirst f elements = 
    if Seq.isEmpty elements then None else elements |> Seq.head |> f

затем F # выводит тип f как f: 'a -> b' option. Это нормально, я понимаю, почему F # выводит f возвращаемый тип как 'b option. Но я хочу, чтобы f было f: 'a -> 'b, и это можно сделать, изменив applyFirst function:

let applyFirst f elements = 
    if Seq.isEmpty elements then None else elements |> Seq.head |> f |> Some

Но интересно, есть ли более элегантный способ сделать это?

1 Ответ

2 голосов
/ 13 сентября 2011

Вы можете сделать

let applyFirst f elems = elems |> Seq.tryPick (f >> Some)

Но я думаю, что предпочитаю

let applyFirst f elems = 
    if Seq.isEmpty elems then 
        None 
    else 
        Some( f(Seq.head elems) )

как более читабельный.

...