2015-05-04 68 views
1

我了解Haskell的函数类型声明一样,函数类型声明多个单词混淆了我

length :: String -> Int 
prefix :: Int -> String -> String 

但有时,在右侧的类型不是简单的类型,如StringInteger但它包含多个文字的话,并且看起来像定义的自定义等

例如词语,这些类型的上this post定义,

withLocation :: Q Exp -> Q Exp 

Q,Exp是什么意思?

formatLoc :: Loc -> String 

Loc是什么意思?它是haskell库的一部分吗?

+0

你在一篇文章中提出三个问题。将帖子限制为单个问题。 – rightfold

+0

对于大多数问题的答案是:你有一些名为[Haskell中的种类](https://en.wikipedia.org/wiki/Kind_(type_theory)) - 它是类型上的一步 - 所以你的'String'在这里有'*',你的''''有*'*'''含义:你必须给'Q'一个类型(类型'*'),它会导致某种类型的'*'(另一个类型) - 这就是为什么你必须放在那里 - 它几乎与函数/部分应用程序相同,... – Carsten

+0

为另一个:有一些名为'Loc'的​​类型[Hayoo](http:///hayoo.fh-wedel.de/?query=Loc)会发现 - 如果你看这个问题,它将是[Language.Haskell.TH]中的一个(https://hackage.haskell.org/package/template -haskell-2.10.0.0/docs/Language-Haskell-TH-Syntax.html#t:Loc)我想 - 如何让emacs在这里工作是另一个问题,取决于你的emacs安装和你的环境。这可能是很多痛苦(我通常不会c是 - 使用Hadock来代替) – Carsten

回答

3

类型Q,ExpLoc是源文件开始时导入的模板哈斯克尔模块的类型。

Q是一个参数化的类型,就像,比方说,从前奏,其在这里施加到ExpMaybeIO

如何从emacs编辑器执行goto defintion

这可以使用Scion来实现,但不会帮助你的这种使用情况下,它不会让你跳进外部库(这可能不提供源代码反正)。