gpt4 book ai didi

f# - 在 F# 中的选择之上构建要么(或结果)

转载 作者:行者123 更新时间:2023-12-04 11:23:18 26 4
gpt4 key购买 nike

我根据 Scott Wlaschin 的 blog 中的信息构建了一个成功/失败的 monad。在此获得额外帮助 stack overflow posting .我最终得到了一种类型

type Result<'a> = 
| Success of 'a
| Error of string

我现在意识到这相当于 F# 中的 Choice 和 haskell 中的任一。我想重用代码而不是保留我自己的代码,但只想更改实现而不必更改我现有的代码。我想将我现有的名称与 Choice 的实现一起使用。 (或者可能是 fsharpx 中的扩展选项。)

我试过了
type Result<'a> = Choice<'a, string>
let Success = Choice1Of2
let Error = Choice2Of2

这几乎有效,但是当我在匹配中使用 Error 时,出现错误“未定义模式鉴别器‘错误’。
    match getMetaPropertyValue doc name with
| Error msg -> ()
| Success value -> value

最佳答案

您还需要一个事件模式:

type Result<'a> = Choice<'a,string>
let Success x :Result<'a> = Choice1Of2 x
let Error x :Result<'a> = Choice2Of2 x
let (|Success|Error|) = function Choice1Of2 x -> Success x | Choice2Of2 x -> Error x

然后为 Either :
type Either<'a,'b> = Choice<'b,'a>
let Right x :Either<'a,'b> = Choice1Of2 x
let Left x :Either<'a,'b> = Choice2Of2 x
let (|Right|Left|) = function Choice1Of2 x -> Right x | Choice2Of2 x -> Left x

我就是这样做的 here .

关于f# - 在 F# 中的选择之上构建要么(或结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28411297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com