小编Smo*_*Ken的帖子

Rust 中返回函数的正确语法是什么?

Rust 中返回函数的正确语法是什么?

以下代码无法编译。

  fn identity<T>(a: T) -> T {
    return a;
  };

  fn right<T>(a: T) -> Fn {
    return identity;
  };
Run Code Online (Sandbox Code Playgroud)

return function rust

15
推荐指数
1
解决办法
1万
查看次数

"Hello" |&gt; printfn 在 F# 中生成错误

https://tryfsharp.fsbolero.io/

printfn "Hello"
Run Code Online (Sandbox Code Playgroud)

但是,使用管道运算符可以按预期工作,没有错误

"Hello" |> printfn
Run Code Online (Sandbox Code Playgroud)

类型“string”与类型“Printf.TextWriterFormat”不兼容

我了解管道操作员的行为:

f(a)相当于a |> f

为什么后者会产生错误?谢谢。

f# pipeline function

6
推荐指数
1
解决办法
161
查看次数

F# 中的 Haskell `$` 可能吗?

在 Haskell 中,我们可以写

print $ abs $ 3 - 5

使用$

在 F# 中,我们可以这样写

printfn "%d" << abs <| 3 - 5

然而,在 F# 中的许多情况下,具有相同的功能也很有用,$因为上面只是带有二元运算符的表达式。

Haskell 的技巧$是它的二元运算符中优先级最低。

于是我又调查了一下

https://learn.microsoft.com/en-us/dotnet/fsharp/language-reference/symbol-and-operator-reference/#operator-precedence

不幸的是,我观察到,没有优先级较低的运算符可以安全地重载,因为它们似乎都是必不可少的。

您对此有什么想法吗?

你认为$F# 中的 Haskell 可能吗?

f# haskell operator-overloading binary-operators

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

Option/Maybe Monad 相对于 Functor 有什么优势?

我理解 IO monad 和 List Monad 相对于 Functor 的优势,但是,我不理解 Option/Maybe Monad 相对于 Functor 的优势。

这只是语言类型的整合吗?

或者

Option/Maybe Monad在具体使用上相对于Functor有什么优势?

附言。询问具体使用中的优点不是基于意见的,因为如果有的话,可以在不带主观方面的情况下指出。

PS.PS。这里的一些成员是如此渴望反复推动

选项既是函子又是单子?

应该是答案,或者 QA 是重复的,但实际上不是。

我已经了解基础知识,例如

每个单子都是一个应用函子,每个应用函子都是一个函子

作为那里接受的答案,这不是我在这里不问的。

这里有一个很好的答案,未包含在之前的质量检查中。

每个问题的方面、细节或解决方案都有很大不同,所以请避免在这里粗暴地“捆绑”不同的东西。

monads haskell scala functor option-type

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

F# 错误:“要么使‘it’的参数显式,要么如果您不希望它是通用的,请添加类型注释。”

在 F# 交互式 shell 中dotnet fsi,我尝试flip像 Haskell 中那样测试函数,

flip :: (a -> b -> c) -> b -> a -> c

> let flip = fun f -> fun a -> fun b -> f(b)(a);;
val flip: f: ('a -> 'b -> 'c) -> a: 'b -> b: 'a -> 'c
Run Code Online (Sandbox Code Playgroud)

然后,研究内置管道运算符,

> (|>);;
val it: ('a -> ('a -> 'b) -> 'b)
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。

现在,

> flip (|>);;

  flip (|>);;
  ^^^^^^^^^

/..... : error FS0030: Value …
Run Code Online (Sandbox Code Playgroud)

f# haskell type-systems functional-programming

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

Haskell 中 Monad 和 Functor 类型类的 Monad 和 Functor 定律

我是一个有点经验的函数式程序员,但我一直对声明 \xe2\x80\x9cA monad is just a monoid in the Category of endofunctors\xe2\x80\x9d 以及 Haskell 中 monads/functors 的实际实现感到困惑其他函数式语言。

\n

根据 Haskell Wiki,\n https://wiki.haskell.org/Functor

\n
class Functor f where\n    fmap :: (a -> b) -> f a -> f b\n    (<$) :: a -> f b -> f a\n
Run Code Online (Sandbox Code Playgroud)\n

函子定律

\n

函子必须保留恒等态射

\n
fmap id = id\n
Run Code Online (Sandbox Code Playgroud)\n

函子保留态射的组成

\n
fmap (f . g)  ==  fmap f . fmap g\n
Run Code Online (Sandbox Code Playgroud)\n

我很明白这一点,所以不需要进一步解释;然而,当我们使用 monad 运算符时>>=,现在我们有了 Monad 实现和 Monad 法则

\n …

monads haskell functional-programming functor category-theory

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