相关疑难解决方法(0)

在F#中实现Haskell-MaybeMonad - 我们怎么能得到这个懒惰?

我们正在尝试从F#中的http://www.haskell.org/all_about_monads/html/maybemonad.html构建Haskell-MaybeMonad示例.

这个想法是在两个词典中搜索一个mailaddress.如果两个查找中的一个返回结果,我们将查看第三个查找.

let bindM x k =
    match x with
    | Some value -> k value
    | None   -> None

let returnM x = Some x

type MaybeBuilder() =
     member this.Bind(x, k) = bindM x k
     member this.Return(x)  = returnM x
     member this.ReturnFrom(x) = x
     member this.Delay(f)   = f()

let maybe = MaybeBuilder()

//Sample dictionaries
let fullNamesDb = 
    [("Bill Gates", "billg@microsoft.com")    
     ("Bill Clinton", "bill@hope.ar.us")
     ("Michael Jackson", "mj@wonderland.org")
     ("No Pref Guy", "guy@nopref.org")]
       |> Map.ofList

let nickNamesDb =
    [("billy", "billg@microsoft.com") …
Run Code Online (Sandbox Code Playgroud)

monads f# haskell maybe

5
推荐指数
1
解决办法
788
查看次数

对F#选项类型执行计算

我正在尝试通过返回双选项而不是双精度来编写一些处理错误的函数.其中许多函数互相调用,因此将双选项作为输入来输出其他双选项.问题是,我不能用双选项做什么,我可以用双打做 - 简单的事就是用'+'添加它们.

例如,一个除以两个双精度数的函数,并返回一个带有none的双选项,用于除以零错误.然后另一个函数调用第一个函数并为其添加另一个double选项.

请告诉我是否有办法做到这一点,或者我是否完全误解了F#选项类型的含义.

f# options

3
推荐指数
1
解决办法
437
查看次数

F# 相当于 Kotlin 的 ?。操作员

我刚开始我的第一个 F# 项目并且来自 JVM 世界,我真的很喜欢 Kotlin 的可空性语法,并且想知道如何在 F# 中实现类似的紧凑语法。

下面是一个例子:

class MyClass {
    fun doSomething() {
        // ...
    }
}

// At some other place in the code:
val myNullableValue: MyClass? = null
myNullableVallue?.doSomething()
Run Code Online (Sandbox Code Playgroud)

这是做什么的:

  1. 如果myNullableValue没有 null的,即有一些数据,doSomething()是该对象上。
  2. 如果myNullableValuenull(就像上面的代码一样),什么都不会发生。

据我所知,F# 等效项是:

type MyClass = 
    member this.doSomething() = ()

type CallingCode() = 
    let callingCode() = 
        let myOptionalValue: MyClass option = None
        match myOptionalValue with 
        |Some(x) -> x.doSomething()
        |None -> ()
Run Code Online (Sandbox Code Playgroud)

在 Kotlin …

f# kotlin

3
推荐指数
1
解决办法
84
查看次数

在F#中构建具有Applicative功能的记录

假设有一个type r = {A : int; B : string; C : int; D : string}和一些值:

let aOptional : int option = ...
let bOptional : string option = ...
let cOptional : int option = ...
let dOptional : string option = ...
Run Code Online (Sandbox Code Playgroud)

如何r optional从他们的eleganlty(没有嵌套的案件等)构建?


顺便说一下,这是如何在haskell中完成的Control.Applicative:

data R = R { a :: Integer, b :: String, c :: Integer, d :: String}

R <$> aOptional <*> bOptional <*> cOptional <*> dOptional :: Maybe …
Run Code Online (Sandbox Code Playgroud)

f# haskell

2
推荐指数
2
解决办法
218
查看次数

标签 统计

f# ×4

haskell ×2

kotlin ×1

maybe ×1

monads ×1

options ×1