我在问我是否可以添加相同的想法:
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"
答案 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