newtype 问题?

发布于 2022-08-18 12:03:16 字数 1043 浏览 20 评论 6

type Parser a = GenParser Char () a

newtype GenParser tok st a
  = Text.ParserCombinators.Parsec.Prim.Parser (State tok st
                                               -> Text.ParserCombinators.Parsec.Prim.Consumed
                                                    (Text.ParserCombinators.Parsec.Prim.Reply
                                                       tok st a))

能讲讲这段代码意思吗? GenParser与Parser在相互引用?

[ 本帖最后由 sw2wolf 于 2009-5-22 08:10 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

谎言 2022-08-26 12:51:18

Haskell 有六种命名空间:
1. variables
2. value constructors
3. type constructors
4. type variables
5. type classes
6. modules

[ 本帖最后由 izhier 于 2009-5-23 09:22 编辑 ]

拿命拼未来 2022-08-26 11:28:06

原帖由 sw2wolf 于 2009-5-22 13:16 发表
>>newtype GenParser tok st a = Parser (State tok st -> Consumed (Reply tok st a))
那这个Data Constructor中, State tok st -> Consumed (Reply tok st a)是什么意思呢? 是用一个函数来构造吗?

Parser 是 type constructor GenParser 的一个 data constructor,data constructor Parser 的参数的类型为 State tok st -> Consumed (Reply tok st a)

〃温暖了心ぐ 2022-08-26 11:18:48

>>newtype GenParser tok st a = Parser (State tok st -> Consumed (Reply tok st a))
那这个Data Constructor中, State tok st -> Consumed (Reply tok st a)是什么意思呢? 是用一个函数来构造吗?

[ 本帖最后由 sw2wolf 于 2009-5-22 13:27 编辑 ]

节枝 2022-08-25 18:50:14

原帖由 sw2wolf 于 2009-5-22 08:07 发表
type Parser a = GenParser Char () a

newtype GenParser tok st a
  = Text.ParserCombinators.Parsec.Prim.Parser (State tok st
                                               -> Text.ParserCombinators.Parsec.Prim.Consumed
                                                    (Text.ParserCombinators.Parsec.Prim.Reply
                                                       tok st a))

后面这个是不是直接从 GHCi 的输出粘过来的?如果是的话,那么原始的定义就应该是

  1. type Parser a = GenParser Char () a
  2. newtype GenParser tok st a = Parser (State tok st -> Consumed (Reply tok st a))

复制代码
注意,这里的两个 Parser 只是名字相同而已,它们并不是同一个东西。第一个 Parser 是个 type constructor, 而后一个 Parser 是个 data constructor.

做个少女永远怀春 2022-08-24 06:26:41

原帖由 sw2wolf 于 2009-5-22 08:07 发表
能讲讲这段代码意思吗? GenParser与Parser在相互引用?

你看的是哪个版本的 Parsec?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文