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

Car*_*bon 1 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!"
Run Code Online (Sandbox Code Playgroud)

Dav*_*haw 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
Run Code Online (Sandbox Code Playgroud)

没有0最后返回int,你返回unit(结果printfn).

  • @ProbablyAStupidQuestion - 随意提出关于SO的新问题,这些评论并非真正针对新问题设计 - 而且F#问题的答案时间非常快. (3认同)