小编Rum*_*mca的帖子

如何获得更简单但相当于Haskell表达式的版本

虽然我已经学习了Haskell一段时间,但我经常遇到一个常见的问题.我们以此表达式为例:

e f $ g . h i . j
Run Code Online (Sandbox Code Playgroud)

有人可能想知道,给出$.来自Prelude,什么是类型约束eh表达有效?

是否有可能获得"更简单"但等效的表示?对我来说,"更简单"将是一个在任何地方都使用括号的人,并且无需定义运算符优先级规则.

如果没有,我需要阅读哪些Haskell报告部分才能获得完整的图片?

这可能与许多新手Haskell程序员有关.我知道许多程序员添加括号,这样他们就不需要记住(或理解)像这样的优先级表:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

haskell

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

为什么某些功能在hoogle中不可见?

为什么有些功能不可见Hoogle?示例:ppTopElement

ppTopElement :: Element -> String
        -- Defined in `Text.XML.Light.Output'
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?

haskell hoogle

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

如何实现相当于invokeAll的Haskell

我正在寻找Haskell中ExecutorService.invokeAll的等效功能.我需要实现它吗?来自文档:

执行给定的任务,返回完成所有状态和结果的Futures列表.

在我的用例中,任务花费大部分时间等待IO,所以我只需要避免不断地阻塞主线程,这会产生一系列Either结果或错误.

concurrency haskell

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

How to avoid checking for empty value in Haskell?

I'm trying to grasp how Haskell programs can avoid testing for "empty value". I am struggling to get rid of case expression in this program:

main =  do url:outputPath:[] <- getArgs
         let maybeUri = parseURI url
         case maybeUri of
              Just uri -> download uri outputPath
              Nothing -> return ()
Run Code Online (Sandbox Code Playgroud)

My very rough understanding is that I should use monad transformer so that I can use single mappend on Maybe value within IO monad and 'do' syntax should be able to …

monads haskell maybe

4
推荐指数
1
解决办法
224
查看次数

了解Haskell优先级规则如何与多个部分应用程序一起使用

请解释Haskell如何确定优先级的部分,带有多个参数的函数和多个部分应用的函数.有时我发现很难弄清楚当整个表达式采用多个参数时,哪个部分函数会应用哪个参数.

以下是一些示例函数,但我确定不同的示例可能更具说明性.第一部分来自"有效的应用程序设计"一文.

sequence :: [IO a] ? IO [a]
sequence [] = return []
sequence (c : cs) = return (:) `ap` c `ap` sequence cs

(.) (.)
(.) (.) (.)
Run Code Online (Sandbox Code Playgroud)

有没有工具将这些表达式转换为lambda表达式?

haskell

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

Haskell没有实例(Num())来自文字

为什么addString调用与内联表达式不同?

Prelude> ((:).show) 1 []
["1"]
Prelude> let addString = ((:).show)
Prelude> addString 1 []

<interactive>:99:11:
    No instance for (Num ()) arising from the literal `1'
    Possible fix: add an instance declaration for (Num ())
    In the first argument of `addString', namely `1'
    In the expression: addString 1 []
    In an equation for `it': it = addString 1 []
Run Code Online (Sandbox Code Playgroud)

haskell

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

在哪种情况下使用Haskell类别组合?

我想我差不多想出了Class类代表什么.然而,在这个抽象层次,它让我想知道我在哪里可以找到它的通用用途.

使用.id来自哪些代码Control.Category已找到不同实例的实际用途?

haskell category-theory category-abstractions

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

为什么vim会隐藏包裹的行并打印多个@s?

默认情况下,vim包装行但如果它们很长,您最终可能只会看到@屏幕上的字符.这个功能的名称和目的是什么?

vim

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

在原型设计期间逃离IO Monad

如何使GHCI原型设计更加稳健?因为我从文件中读取数据,所以我被锁定在IO monad中.liftM每次缝制都有点令人沮丧.

?: let q xml = fmap (filterChildrenName f) $ elChildren xml
?: liftM q xml
[[Element {elName = QName {qName = "link", qURI = Nothing, qPrefix = Nothing}, elAttribs = [], elContent = [Text (CData {cdVerbatim = CDataText, cdData = "http://planet.haskell.org/", cdLine = Nothing})], elLine = Nothing}]]
?
Run Code Online (Sandbox Code Playgroud)

haskell ghci

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

Haskell演示了OOP设计模式的等价物

有人声称OOP设计模式与函数式语言无关.是否有代码演示如何在Haskell中实现每个模式?特别是,完整的演示还必须展示如何表示对象,OO多态性等.

haskell design-patterns

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