Phi*_* P. 8 f# functional-programming
假设我有一个功能,它做了一些相当复杂的功能,它是在子功能的帮助下实现的.为了使事情更容易,而不是元组,我想使用一些私有的中间结构来实现这个功能.
我不希望这些结构的声明泄漏到外面.所以我想要这样的东西:
let someComplexFun p =
type SomeRecord = {i:int; x:int; y:int;}
type SomeOtherRecord = {...}
let innerFunctionA (x:SomeRecord) = ...
let innerFunctionB (x:SomeOtherRecord) = ...
...
Run Code Online (Sandbox Code Playgroud)
我尝试过但当然编译器不允许我这样做.我查看了文档,我无法在任何地方看到类型必须在模块级别声明.
例如,在LISP中,它似乎完全合法,例如:
(defun foo (when)
(declare (type (member :now :later) when)) ; Type declaration is illustrative and in this case optional.
(ecase when
(:now (something))
(:later (something-else))))
Run Code Online (Sandbox Code Playgroud)
那么,我错过了什么吗?如果F#完全可以吗?