Rust 中返回函数的正确语法是什么?
以下代码无法编译。
fn identity<T>(a: T) -> T {
return a;
};
fn right<T>(a: T) -> Fn {
return identity;
};
Run Code Online (Sandbox Code Playgroud) 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
为什么后者会产生错误?谢谢。
在 Haskell 中,我们可以写
print $ abs $ 3 - 5
使用$。
在 F# 中,我们可以这样写
printfn "%d" << abs <| 3 - 5
然而,在 F# 中的许多情况下,具有相同的功能也很有用,$因为上面只是带有二元运算符的表达式。
Haskell 的技巧$是它的二元运算符中优先级最低。
于是我又调查了一下
不幸的是,我观察到,没有优先级较低的运算符可以安全地重载,因为它们似乎都是必不可少的。
您对此有什么想法吗?
你认为$F# 中的 Haskell 可能吗?
我理解 IO monad 和 List Monad 相对于 Functor 的优势,但是,我不理解 Option/Maybe Monad 相对于 Functor 的优势。
这只是语言类型的整合吗?
或者
Option/Maybe Monad在具体使用上相对于Functor有什么优势?
附言。询问具体使用中的优点不是基于意见的,因为如果有的话,可以在不带主观方面的情况下指出。
PS.PS。这里的一些成员是如此渴望反复推动
应该是答案,或者 QA 是重复的,但实际上不是。
我已经了解基础知识,例如
每个单子都是一个应用函子,每个应用函子都是一个函子
作为那里接受的答案,这不是我在这里不问的。
这里有一个很好的答案,未包含在之前的质量检查中。
每个问题的方面、细节或解决方案都有很大不同,所以请避免在这里粗暴地“捆绑”不同的东西。
在 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) 我是一个有点经验的函数式程序员,但我一直对声明 \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
\nclass Functor f where\n fmap :: (a -> b) -> f a -> f b\n (<$) :: a -> f b -> f a\nRun Code Online (Sandbox Code Playgroud)\n函子必须保留恒等态射
\nfmap id = id\nRun Code Online (Sandbox Code Playgroud)\n函子保留态射的组成
\nfmap (f . g) == fmap f . fmap g\nRun Code Online (Sandbox Code Playgroud)\n我很明白这一点,所以不需要进一步解释;然而,当我们使用 monad 运算符时>>=,现在我们有了 Monad 实现和 Monad 法则
monads haskell functional-programming functor category-theory