【发布时间】:2016-10-30 16:31:20
【问题描述】:
我正在学习 Haskell,但我在精神上解析我遇到的许多 Haskell 表达式时遇到了很多困难。
当然,我希望通过足够的练习,对 Haskell 进行心理解析将成为第二天性,但与此同时,为了理解我遇到的内容,我想找到一些自动翻译的方法将任意“标准 haskell”1 表达式转换为其中所有“不明确”2 子表达式已通过引入必要的括号而被消除的表达式。
例如,它会翻译表达式
f g h i
...进入
((f g) h) i
...,或
a -> b -> c -> d
...进入
a -> (b -> (c -> d))
...等
最好这是我可以通过手机访问的工具,因为我在远离适当的计算机的情况下阅读 haskell 的大部分内容。
1当然,没有这样的工具可以与未知固定性和关联性的自定义运算符一起使用。 “标准haskell”是指prelude和标准haskell库中定义的东西。
2我在这里使用“模糊”作为“在没有优先规则的情况下模糊”的简写。例如。 2 + 3 * 5 是模棱两可的除非有一些优先规则可以解决两个操作中的哪一个将首先执行的问题。
【问题讨论】:
-
我在你的手机上想不出任何东西,但是你可以在 GHCi 中做一些非常简单的事情
-
好吧,haskell-src-exts 可以很容易地获得一个完全明确的解析树并将其打印出来。但它不是真正可读的。安装后尝试使用 ghci 中的
(fmap . fmap . fmap) (const ()) (parseFile "foo.hs")。 -
@Alec:我到底能在 ghci 中做什么? (关于电话:这只是一种偏好,而且是一种温和的偏好,以防万一这件事有选择;如果没有,我很乐意接受 ghci。)
-
This brand new tool 似乎与您在术语级别中描述的完全一样。
-
感谢您的提醒!对于haskell noob(比如我)来说,这看起来像是天赐之物。
标签: haskell