虽然我已经学习了Haskell一段时间,但我经常遇到一个常见的问题.我们以此表达式为例:
e f $ g . h i . j
Run Code Online (Sandbox Code Playgroud)
有人可能想知道,给出$和.来自Prelude,什么是类型约束e或h表达有效?
是否有可能获得"更简单"但等效的表示?对我来说,"更简单"将是一个在任何地方都使用括号的人,并且无需定义运算符优先级规则.
如果没有,我需要阅读哪些Haskell报告部分才能获得完整的图片?
这可能与许多新手Haskell程序员有关.我知道许多程序员添加括号,这样他们就不需要记住(或理解)像这样的优先级表:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
为什么有些功能不可见Hoogle?示例:ppTopElement
ppTopElement :: Element -> String
-- Defined in `Text.XML.Light.Output'
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?
我正在寻找Haskell中ExecutorService.invokeAll的等效功能.我需要实现它吗?来自文档:
执行给定的任务,返回完成所有状态和结果的Futures列表.
在我的用例中,任务花费大部分时间等待IO,所以我只需要避免不断地阻塞主线程,这会产生一系列Either结果或错误.
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 …
请解释Haskell如何确定优先级的部分,带有多个参数的函数和多个部分应用的函数.有时我发现很难弄清楚当整个表达式采用多个参数时,哪个部分函数会应用哪个参数.
以下是一些示例函数,但我确定不同的示例可能更具说明性.第一部分来自"有效的应用程序设计"一文.
sequence :: [IO a] ? IO [a]
sequence [] = return []
sequence (c : cs) = return (:) `ap` c `ap` sequence cs
(.) (.)
(.) (.) (.)
Run Code Online (Sandbox Code Playgroud)
有没有工具将这些表达式转换为lambda表达式?
为什么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) 我想我差不多想出了Class类代表什么.然而,在这个抽象层次,它让我想知道我在哪里可以找到它的通用用途.
使用.或id来自哪些代码Control.Category已找到不同实例的实际用途?
如何使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) 有人声称OOP设计模式与函数式语言无关.是否有代码演示如何在Haskell中实现每个模式?特别是,完整的演示还必须展示如何表示对象,OO多态性等.