让我说我在F#中非常环保(但在C#有4年经验).我想开始学习F#,我正在学习TryFSharp.org教程.我谈到了计算表达式,但事情并不完全清楚.所以我开始谷歌吧.我遇到了另一篇教程/文章,它在第一个例子(日志记录示例)中解释得更好.但后来我继续读到第二个例子; 我不能遵循代码的流程或它应该如何工作,也许是因为我不理解State类型的定义:
type State<'a, 's> = State of ('s -> 'a * 's)
Run Code Online (Sandbox Code Playgroud)
我曾与几个简单的类型在F#已经工作过,我所看到的struct,class,record但我不知道如何阅读此类型或什么是应该做的.我也无法弄清楚of关键字在那里做了什么.
所以我的问题是:这个类型定义做了什么/它中的of关键字有什么作用?
如前所述,State是单例歧视联合类型。两种情况的联合类型如下所示:
type Multi =
| First of name:string
| Second of number:int
Run Code Online (Sandbox Code Playgroud)
一种方法是将其视为Multi基类和First子Second类,其中First构造函数中需要一个字符串,并且Second需要一个 int。这是 C# 中不具备的非常强大的构造。它很强大,因为您可以对这种类型的值进行模式匹配,并且编译器将强制您处理每种情况。
单例联合作为另一种类型的包装很有帮助。在您的示例中,State类型将函数从类型's包装为对 (C# 元组) 'a * 's。事实证明,这是一个非常有趣的类型,因为它形成了一个 monad,因此你可以得到围绕它的各种函数。例如,这个要点展示了如何State使用 monad 来实现函数随机值生成器。
| 归档时间: |
|
| 查看次数: |
1080 次 |
| 最近记录: |