F# 类型不匹配顺序展开 让fibgen(x,y)=如果(x Eluer2.fs(27,25):错误FS0001:类型不匹配。期待 int*int->('a*(int*int))选项 但是给一个 int*int->Option 类型“('a*(int*int))选项”与类型“选项”不匹配 >

F# 类型不匹配顺序展开 让fibgen(x,y)=如果(x Eluer2.fs(27,25):错误FS0001:类型不匹配。期待 int*int->('a*(int*int))选项 但是给一个 int*int->Option 类型“('a*(int*int))选项”与类型“选项”不匹配 >,f#,f#-interactive,F#,F# Interactive,第二行出现类型不匹配错误。我做错了什么?我使用的是F#2.0 答复 在我的交互式窗口上首次完成重置会话仍然是相同的错误 然后重新启动我的项目,现在一切正常 是的,我在同一个会话中执行了下面的代码 //选项类型是有区别的并集。 类型选项 > Eluer2.fs(27,25):错误FS0001:类型不匹配。期待 int*int->('a*(int*int))选项 但是给一个 int*int->Option 类型“('a*(int*int))选项”与类型“选项”不匹配 > 正如卡斯滕在评论中指出的

第二行出现类型不匹配错误。我做错了什么?我使用的是F#2.0

答复 在我的交互式窗口上首次完成重置会话仍然是相同的错误
然后重新启动我的项目,现在一切正常

是的,我在同一个会话中执行了下面的代码

//选项类型是有区别的并集。
类型选项
> 
Eluer2.fs(27,25):错误FS0001:类型不匹配。期待
int*int->('a*(int*int))选项
但是给一个
int*int->Option
类型“('a*(int*int))选项”与类型“选项”不匹配
> 


正如卡斯滕在评论中指出的那样,如果您在clean F#Interactive中输入代码,代码工作正常。由于编译器抱怨Carsten在评论中指出的
选项,如果您在clean F#Interactive中输入代码,代码工作正常。因为编译器抱怨说,
OptionHi-只要把你的代码复制粘贴到my F#interactive中,一切都会很顺利。。。因此,您的安装可能有问题-您是否尝试重新启动(VS/Windows)?顺便说一句:您缺少1、1、2、3、5、8……的前(两个?)个值。您使用的是什么版本的F?我用F#2.0检查了一下,它可以正常工作expected@Carsten克尼,谢谢。我现在已经重新启动了这个项目,并且工作得很好。在学习f#-的过程中,每一个错误都开始看起来像我的愚蠢错误:(嗨-只是把你的代码复制粘贴到我的f#-交互中,一切都像一个魔咒一样工作…所以也许你的安装有问题-你试着重新启动(VS/Windows)了吗?顺便说一句:你错过了前(两个?)值1,1,2,3,5,8,…你使用什么版本的F#呢?我用F#2.0检查了它,它的工作原理是expected@CarstenKönig谢谢。我现在重新启动了项目,工作正常。在学习f#-的过程中,每个错误都开始看起来像我的愚蠢错误:(或者可能是不同FSharp.Core库之间的版本冲突?——在VS11(.net 4.0)中开发时有一些冲突,然后在“old”中使用此库 VS2010@CarstenK这也可能是事实,但我想所有的F#库都将选项类型定义为
'T option
,而不是
optionEnuis!F#在这个地球上没有任何地方,我本可以考虑重新启动我的项目。相信我,我已经花了几个小时试图解决这个问题issue@Tomas当前位置希望有一刻该选项包括就像元组一样加入到框架中;@CarstenKönig那太好了:-)但我担心只有当C#变得更好
switch
语句时才会发生这种情况!或者不同的FSharp.Core lib之间可能存在版本冲突?-在VS11(.net 4.0)中开发时有一些冲突,然后在“old”中使用这个lib VS2010@CarstenK这也可能是事实,但我想所有的F#库都将选项类型定义为
'T option
,而不是
optionEnuis!F#在这个地球上没有任何地方,我本可以考虑重新启动我的项目。相信我,我已经花了几个小时试图解决这个问题issue@Tomas当前位置希望有一刻该选项包括就像元组一样加入到框架中;)@CarstenKönig那太好了:-)但我担心只有在C#变得更好
switch
语句时才会发生这种情况!
let fibgen (x,y) = if(x < 4000000) then Some(x+y, (y, x+y)) else None

let fibseq = Seq.unfold fibgen (1,1)
// The option type is a discriminated union.
type Option<'a> =
    | Some of 'a
    | None




Interactive window Output as below

val fibgen : int * int -> Option<int * (int * int)>

> 


Eluer2.fs(27,25): error FS0001: Type mismatch. Expecting a
    int * int -> ('a * (int * int)) option    
but given a
    int * int -> Option<int * (int * int)>    
The type '('a * (int * int)) option' does not match the type 'Option<int * (int * int)>'
> 
type Option<'T> = 
  | None
  | Some of 'T