如何使用case语法分配mvar?

时间:2013-11-16 23:07:54

标签: haskell yesod

我在问我是否可以添加相同的想法:

if maVar == "false" then maVar = "" else maVar = maVar

在tmy code haskell(yesod)

let maVar= unpack $ case Map.lookup "maVarSession" sess of
        Just a -> a
        Nothing -> "Nothing"

2 个答案:

答案 0 :(得分:1)

您似乎正在尝试为maVar分配新值。这个在Haskell中没有意义,因为Haskell实际上没有可变变量,*并且你得到语法错误,因为解析器看到=处于不接受的位置声明。

相反,您可以声明一个新值(我们可以将其命名为“{1}}”,定义为maVar'

然后,我们可以写

maVar' = if maVar == "false" then "" else maVar

守卫也可用于编写新声明(可能更清楚,可能不是)

let maVar = unpack $ case Map.lookup "maVarSession" sess of
        Just a -> a
        Nothing -> "Nothing"
    maVar' = if maVar == "false" then "" else maVar
  [...]

但是,确保你明白自己到底在做什么可能是一个好主意;或许阅读一些关于Haskell的介绍性文章,以了解纯度以及Haskell如何与您可能熟悉的语言区别开来。

*你可以有一个可变的细胞,但你真的必须专门问它 - 你不能轻易地做到这一点。

答案 1 :(得分:0)

不,maVar是不可变的,始终是String

在Haskell中没有任何false。它有False

你可以做下一个:

let maVar = ...
in
  let maVarNew = if maVar == "Nothing" then "" else maVar
  in