2016-07-12 2 views
1

первый день работая в F #. Я провел некоторое время в Haskell и пытаюсь научиться F # работать с каким-то существующим кодом .net. Почему этот код сердится на меня? Что эквивалентно: t? Как добавить аннотацию типа к основному?Почему в этом выражении f # возникает ошибка типа?

type Color = Red | Green 
[<EntryPoint>] 
let main = 
    let a = Red 
    if a = Red then 
     printfn "hi!" 
    else 
     printfn "no!" 
+3

Вы не обязательно используете 'main' в таком простом приложении: https://dotnetfiddle.net/DAuzG8 –

+0

@FoggyFinder - хорошая точка, часто лучше начинать возиться в FSI, используя скрипты в VS/VSCode/Ionide/и т. Д. – DaveShaw

ответ

6

Сигнатура функции с атрибутом [<EntryPoint>] (например main) должен быть string[] -> int в вашей версии она отсутствует параметр string[] и возвращаемое значение типа int

Вы можете исправить это путем добавления тех в:

type Color = Red | Green 
[<EntryPoint>] 
let main argv = //argv added here is inferred to be string[] 
    let a = Red 
    if a = Red then 
     printfn "hi!" 
    else 
     printfn "no!" 
    0 //Return 0, all OK 

Без 0 в конце вернуть int, вы возвращаете unit (результат printfn).

+0

Ah. Я пытаюсь запустить это в интерактивном режиме, и я должен использовать, например, [| "1"; "2"; "3" |]. Что здесь делают трубы? – Carbon

+0

Это строгий список? – Carbon

+0

Попробуйте в FSI :). С 'let a = [| «А»; |] '=' val a: string [] = [| "a" |] 'Без:' val a: string [] = [| "a" |] '=' val l: string list = ["l" ] '. – DaveShaw

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