小编Mat*_*tei的帖子

Haskell 中的求值是如何工作的,对于有约束的表达式

假设我用 GHCi 写:

GHCi> let x = 1 + 2 :: Integer
GHCi> seq x ()
GHCi> :sprint x
Run Code Online (Sandbox Code Playgroud)

GHCix = 3按自然预期打印。

然而,

GHCi> let x = 1 + 2
GHCi> seq x ()
GHCi> :sprint x
Run Code Online (Sandbox Code Playgroud)

产量 x = _

这两个表达式之间的唯一区别是它们的类型 ( Integervs Num a => a)。我的问题是究竟发生了什么,为什么x在后一个例子中似乎没有评估。

polymorphism evaluation haskell strictness

5
推荐指数
0
解决办法
58
查看次数

Haskell monadic 解析器与变形

我的问题是如何将递归的、F 代数风格的递归类型定义与 monadic/applicative 风格的解析器结合起来,以适应现实的编程语言。

我刚刚开始使用以下Expr定义:

data ExprF a = Plus a a |
              Val Integer deriving (Functor,Show)
data Rec f = In (f (Rec f)) 
type Expr = Rec ExprF
Run Code Online (Sandbox Code Playgroud)

我试图将它与使用变形的解析器结合起来:

ana :: Functor f => (a -> f a) -> a -> Rec f
ana psi x = In $ fmap (ana psi) (psi x)

parser = ana psi
          where psi :: String -> ExprF String
                psi = ???
Run Code Online (Sandbox Code Playgroud)

据我所知,在我的示例中,psi应该只解析一个整数,或者它应该决定字符串是 a<expr> + <expr>然后(通过递归调用 …

monads parsing haskell anamorphism recursion-schemes

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