maybe

    3热度

    2回答

    我一直在研究'真实世界Haskell',我一直在研究如何使用Maybe。我从第3章中编写了这种数据类型和相应的函数。本书建议尝试将其转换为使用Maybe并摆脱Nil类型。我一直在玩这个,但我不知道该怎么做。我尝试过在不同的地方添加,但我真的只是猜测而不知道如何去做。 data List a = List a (List a) | Nil deriving (Show)

    0热度

    2回答

    如果我们在monadPlusSDif,Maybe处选择它们作为MonadPlus的数据类型,那么这两个功能是否等效? tdif :: Int -> Int -> Maybe Int tdif x y | y == 0 = Nothing | otherwise = Just (div x y) monadPlusSDif :: MonadPlus m => Int ->

    3热度

    3回答

    ,我有以下构建在我的代码: f :: Maybe A -> X f a = case a of Nothing -> x (Just b) -> case b of Nothing -> y (Just c) -> case c of Nothing -> z (Just d) -> d ,我没有看到一个明显的方式来简化,而不是

    1热度

    2回答

    我发现自己想要这个小小的功能,但它似乎并没有在Data.Maybe。它在别的地方吗? splat :: (a -> Bool) -> a -> Maybe a splat c a | c a = Just a | otherwise = Nothing

    11热度

    6回答

    我有一个这样的名单: let foo = [Just 1, Just 2, Nothing, Just 3, Nothing, Nothing] 通过使用catMaybes我可以只提取Just -constructed值: catMaybes foo -- [1,2,3] 我现在期待对于一个函数,它不仅产生一个Just s的列表,而且通过遍历一次有限列表计算一个Nothing s。它应该有

    2热度

    4回答

    下面是两个互相递归函数对的例子。第一个示例终止并产生预期的结果。第二个例子是类似的,除了它使用Maybe monad。 fun1'在被调用时不会终止。 fun1 = 1 + fun2 fun2 = let x = fun1 in 2 -- terminates. result is 3. fun1' = do a <- Just 1 b <- fun2'

    1热度

    2回答

    是否有操作员或库函数,使得v ??? d 评估为v如果v是从None不同的和不评估d,或 评估为d如果v等于None。 (其中???表示我要找的操作员)。 运营商or几乎是我想要的,但如果v是False,它将评估为默认值。只有在参数为None时,我才需要默认值,以便False ??? d的计算结果为False。 更新:要澄清,在我的情况v是一个复杂的表情,像computeSomethingLong

    17热度

    2回答

    让我们两个功能: f :: a -> Maybe b g :: b -> Maybe c 功能>>=会以这样的方式f >>= g将与f结果执行g只有当它不Nothing工作。换句话说,它要求f和g都能成功产生任何结果。 我正在实施一个解析器,并意识到我的词法分析器会从这个相反的方面受益。那就是: f :: a -> Maybe b g :: a -> Maybe b planb ::

    4热度

    3回答

    我hvae只是invended的Maybe以下替代定义: type Maybe' a = forall b. (b -> (a -> b) -> b) just :: a -> Maybe' a just a = \d f -> f a nothing :: Maybe' a nothing = const bind :: Maybe' a -> (a -> Maybe' b) -

    0热度

    2回答

    我想从“failable”数据类型中轻松获取某个值,或者在发生故障时使用默认值。 这是我为Maybe实现: infixr 1 <||> (<||>) :: Maybe a -> a -> a (<||>) = flip fromMaybe pred :: String -> String -> Bool pred x name = (x ==) <$> name `lookup` myM