pointfree

    7热度

    1回答

    在研究与编程相关的话题我在lambdabot跨越pointfree重构工具来抓Haskell和在想,如果F#能够被重构到一个pointfree风格? 我不主张使用pointfree风格,但把它看作是更好地理解功能的一种手段。 注意:pad回答了此问题的早期版本,但我重新提出了这个问题,因为答案对其他人学习和使用F#有价值,我不希望由于某些接近的投票而被删除。 注意:只是因为我改变了这个问题,不要把

    9热度

    2回答

    F的组合物,和g,看起来像 f :. g = \a b -> f (g a) (g b) 是我在我的代码找到很经常的图案。它与一元函数组成类似,只有f是二元的,我希望g在传递给f之前应用于两个参数。 当我问lambdabot将其转换为自由点的形式,我得到了奇怪的咒语 ,我宁愿没有在我的代码都有,所以我最终只是写出来的模式明确。 在这种情况下,是否有一种普遍接受的方式来编写组合器?或者我在这种情

    10热度

    2回答

    我想知道如何在免费的情况下编写f x = zip x (tail x)。所以我使用了免提程序,结果是f = ap zip tail。 ap是Control.Monad的一个函数 我不明白点自由定义是如何工作的。如果我能从类型的角度理解它,我希望我能弄明白。 import Control.Monad (ap) let f = ap zip tail let g = ap zip :info a

    8热度

    3回答

    比方说,我们有这个自由点功能: f1 = flip const map 我茫然不知究竟它的工作原理和什么是应该做的? 也就是说我知道地图,常量和翻转函数是什么。但把这些放在一起对我来说没有意义。这个函数究竟发生了什么? 似乎每次都会传回同样的东西,但是......为什么?

    2热度

    1回答

    我想了解无点式的概念。我做了一个函数尝试使用uncurry添加两个值。 add = (+) . uncurry ,结果抱怨: No instance for (Num ((a0, b0) -> c0)) arising from a use of `+' Possible fix: add an instance declaration for (Num ((a0, b0

    1热度

    4回答

    比方说,我有一个看起来像这样3元组序列: Seq("m1" -> 1, "m2" -> 2) Seq("m3" -> 3, "m4" -> 4) Seq("m5" -> 5, "m2" -> 6) 我要地图对这些并返回看起来像下面的3个新的记录: Seq("m1" -> Some(1), "m2" -> Some(2), "m3" -> None, "m4" -> None, "m5" -

    43热度

    2回答

    我看到很多功能是根据模式(f .) . g定义的。例如: countWhere = (length .) . filter duplicate = (concat .) . replicate concatMap = (concat .) . map 这是什么意思?

    5热度

    5回答

    我有这样的代码片段: palindrome :: String -> Bool palindrome x = x == reverse x 有没有办法在一个自由的点式的改写呢?

    6热度

    4回答

    我有一个创建Async工作流的函数,以及带有10个以咖喱风格为参数的函数。例如 let createSequenceCore a b c d e f g h i j = async { ... } 我要创建另一个函数来启动工作流,所以我有 let startSequenceCore a b c d e f g h i j = Async.StartImm

    2热度

    1回答

    Learn You a Haskell讨论“制作一个单子”具有以下Prob类型: import Data.Ratio newtype Prob a = Prob { getProb :: [(a,Rational)] } deriving Show Prob表示a类型,然后被用于表示此a的概率的Rational。 让我们看一个Prob实例: *Main> Prob [('a', 1%2),