Подтвердить что ты не робот

F # Объявление типа возможно ala Haskell?

Я просмотрел несколько источников: в F # ala Haskell, как представляется, невозможно объявить определение типа:

' haskell type def:
myFunc :: int -> int

Я хотел бы использовать этот стиль типа def в F # - FSI с радостью откликнется на меня:

fsi> let myType x = x +1;;

val myType : int -> int

Я хотел бы быть явным о сигнатуре типа def в F #, как в Haskell. Есть ли способ сделать это? Я бы хотел написать в F #:

//invalid F#
myFunc : int -> int
myFunc x = x*2
4b9b3361

Ответ 1

Если вы хотите сохранить читаемые декларации типов отдельно от реализации, вы можете использовать файлы "fsi" (файл подписи F #). "Fsi" содержит только те типы и обычно также комментарии - вы можете увидеть некоторые хорошие примеры в источнике библиотек F #. Вы бы создали два таких файла:

// Test.fsi
val myFunc : int -> int

// Test.fs
let myFunx x = x + 1

Это работает для скомпилированных проектов, но вы не можете легко использовать этот подход с помощью F # Interactive.

Ответ 2

Обычный способ - сделать let myFunc (x:int):int = x+1.

Если вы хотите быть ближе к стилю haskell, вы также можете сделать let myFunc : int -> int = fun x -> x+1.

Ответ 3

Вы можете сделать это в F # так, чтобы указать возвращаемое значение myType.

let myType x : int = x + 1

Вы также можете указать тип параметра.

let myType (x : int) : int = x + 1

Надеюсь, это поможет!

Ответ 6

да, вы можете, используя лямбда-функции

myFunc : int -> int =
  fun x -> x*2

это также позволяет избежать проблемы в haskell для записи имени функции дважды.