F# ma oproti OCAML taku vymoženosť, že si viem pomenovať typy parametrov aj vrámci typovej signatúry funkcie
type foo = bool -> bool
vs.
type foo = isEmpty:bool -> bool
alebo pri algebraických typoch:
type Person =
| Man of name:string * age:int
| Woman of name:string * age:int * cupSize:CupSize
pri typoch tagu v dicriminated unions to vieme pomenovať a zobrazí to aj autocomplete, lenže skúšam pomenovať funkcie vrátené po curryingu a tam to dáko autocomplete nezobrazí, nemáte pls tip či sa to nedá nejako ohackovať? Lebo tu je konktrétny príklad z praxe:
module Name
let rec private findUniqueName' (index : int) (exists : string -> bool) (name : string) =
let newName = if index = 0 then name else $"{name}-{index}"
if exists(newName)
then name |> findUniqueName' (index + 1) exists
else newName
// typy explicitne netreba uvadzat ale chcem to mat pomenovane koli autocomplete:
let findUniqueName : nameExists:(string -> bool) -> name:string -> string = findUniqueName' 0
let rec private findUniqueSlug' (index : int) (slugExists : string -> bool) (name : string) =
name
|> _.ToSlug()
|> findUniqueName' 0 slugExists
let findUniqueSlug : slugExists:(string -> bool) -> slug:string -> string = findUniqueSlug' 0