在从Haskell中的do块返回之前,是否可以检查某些条件?

在从Haskell中的do块返回之前,是否可以检查某些条件?,haskell,syntax,monads,do-notation,Haskell,Syntax,Monads,Do Notation,我在做这样的事情 do xs <- xss x <- x if x > 3 return x do xs您需要导入Control.Monad并使用guard import Control.Monad (guard) do xs <- xss x <- xs guard (x > 3) return x import Control.Monad(守卫) 做 xs将if替换为guard@hustmphrr如果你想回答一个问题,

我在做这样的事情

do
  xs <- xss
  x <- x
  if x > 3
  return x
do

xs您需要导入
Control.Monad
并使用
guard

import Control.Monad (guard)

do
  xs <- xss
  x <- xs
  guard (x > 3)
  return x
import Control.Monad(守卫)
做

xs将
if
替换为
guard
@hustmphrr如果你想回答一个问题,回答它,不要发表评论,但一定要知道答案。我不确定
guard
是否真的解决了这里的问题,无论如何,任何关于
guard
的建议都应该解释如何使用
if
模仿/实现它。另外,
guard
不需要任何包,只需要一个模块导入(
Control.Monad
)。@heapOverflow您能否简要解释一下Scala代码的具体功能,或者给出一个简单的具体示例?如果x不大于3,结果应该是什么?仅供参考,Haskell中并没有“返回前”的概念
return
的意思与您认为来自其他语言的意思完全不同。我同意将函数命名为
return
可能是个坏主意(不是因为名称本身,而是因为命令式语言将其用于完全不同的语义概念),但是
return
实际上并不终止控制流(本身),也不意味着它本身返回一个值。甚至更好的是:
do{xs 3)xs}
。总是不需要写
x
import Control.Monad (guard)

do
  xs <- xss
  x <- xs
  guard (x > 3)
  return x
do
  xs <- xss
  x <- xs
  _ <- filter (>3) [x]
  return x
do
  xs <- xss
  filter (> 3) xs