为什么这个f#表达式中存在类型错误?

时间:2016-07-12 19:18:54

标签: f#

第一天在F#工作。我在Haskell度过了一段时间,并且正在尝试学习F#以使用一些现有的.net代码。为什么这段代码对我生气了?什么相当于:t?如何向main添加类型注释?

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

1 个答案:

答案 0 :(得分: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,则返回unitprintfn的结果)。