标签: maybe

Haskell映射返回monad

Data.Map和Data.IntMap中的查找函数当前返回包含在带有类型签名的Maybe中的值

lookup  :: Ord  k => k -> Map  k a -> Maybe  a
Run Code Online (Sandbox Code Playgroud)

它曾经有更普遍的类型

lookup  :: (Monad  m, Ord  k) => k -> Map  k a -> m a
Run Code Online (Sandbox Code Playgroud)

我意识到前者可能会减少额外类型规范的需要,但后者会使它更加通用,并允许在列表推导中使用查找.有没有办法模仿新版本的这种行为,还是我必须使用旧版本的库?

monads haskell map maybe

10
推荐指数
3
解决办法
1278
查看次数

Monad变形金刚monad复制

我是monad变形金刚的新手,很抱歉这个问题很简单.我有价值val :: MaybeT IO String和功能fn :: String -> IO [String].所以绑定后,我有val >>= liftM fn :: MaybeT IO (IO [String]).如何删除重复的IO monad并获取类型的结果MaybeT IO [String]

io monads haskell monad-transformers maybe

10
推荐指数
1
解决办法
241
查看次数

Python中的Swift Optionals(或Haskell's Maybe)?

在斯威夫特我能做到var?.prop.这导致nil,如果varnil,否则将导致价值prop的财产var.

同样地,我可以做var >>= prop在Haskell,这给了我NonevarIS None,否则它给我应用的价值prop里面的值var(裹Just).

Python中有相应的东西吗?

python haskell optional maybe swift

10
推荐指数
1
解决办法
1753
查看次数

如何过滤Maybe值

我正在尝试创建一个验证输入的函数String -> Maybe Int.我检查输入字符串是否是数字然后检查该数字是否在一个范围内.到目前为止我有

validateNumber :: String -> Maybe Int
validateNumber n  = go $ (readMaybe::String -> Maybe Int) n
  where
    go (Just a) = inRange a
    go Nothing  = Nothing

inRange :: Int -> Maybe Int
inRange n
  | n > 0     = Just n
  | otherwise = Nothing
Run Code Online (Sandbox Code Playgroud)

这感觉就像糟糕的代码.怎么写呢?

此外,如果我试图循环一个函数,如果它返回Nothing,最好的方法是什么:

所以要循环这个main函数,我正在做:

case v of
  Nothing -> main
  Just x  -> {do something}
Run Code Online (Sandbox Code Playgroud)

monads haskell maybe

10
推荐指数
2
解决办法
1001
查看次数

我如何简洁地写一个|| b其中a和b是可选值?

我对任何语言的答案感到满意,但我最终想要用Java解答.(Java 8+很好.不仅限于Java 8.我试图修复标签.)

如果我有两个Optional<Integer>值,我如何简洁地计算等价物a || b,意思是:a如果它被定义; 否则b,如果已定义; 否则empty()

Optional<Integer> a = ...;
Optional<Integer> b = ...;
Optional<Integer> aOrB = a || b; // How to write this in Java 8+?
Run Code Online (Sandbox Code Playgroud)

我知道我可以写a.orElse(12),但如果默认的"值"也是Optional怎么办?

显然,在C#中,运营商??做了我想要的.

functional-programming optional maybe java-8 java-9

10
推荐指数
3
解决办法
445
查看次数

Haskell中isNothing和(== Nothing)之间的区别?

我很困惑为什么下面涉及的两个函数Nothing是不同的:

coalesce  m1 m2 = if  isNothing m1 then m2 else m1

coalesce' m1 m2 = if  (m1 == Nothing) then m2 else m1
Run Code Online (Sandbox Code Playgroud)

第一个有类型:

?> :t coalesce
coalesce :: Maybe a -> Maybe a -> Maybe a
Run Code Online (Sandbox Code Playgroud)

正如所料.但第二个有:

?> :t coalesce'
coalesce' :: Eq a => Maybe a -> Maybe a -> Maybe a
Run Code Online (Sandbox Code Playgroud)

为什么使用(==Nothing)引入Eq a约束?

(GHC 8.2.2)

haskell maybe

10
推荐指数
2
解决办法
1836
查看次数

在 Elm 中将 List (Maybe a) 转换为 Maybe (List a)

在 Elm 中转换List (Maybe a)为的好方法是Maybe (List a)什么?

逻辑很简单:

  • Just (List a)如果所有项目都是,则返回Just a
  • 否则,返回Nothing
Example 1:

input:  [ Just 1, Just 2, Just 3 ]
output: Just [ 1, 2, 3 ]

Example 2:

input:  [ Just 1, Nothing, Just 3 ]
output: Nothing
Run Code Online (Sandbox Code Playgroud)

使用某些内置功能可以轻松完成吗?

我想出的最好的看起来是这样的:

listOfMaybesToMaybeList : List (Maybe a) -> Maybe (List a)
listOfMaybesToMaybeList listOfMaybes =
    List.foldl
        (\maybeItem ->
            \maybeResultList ->
                case ( maybeItem, maybeResultList ) of
                    ( Just item, Just …
Run Code Online (Sandbox Code Playgroud)

algorithm list maybe elm

10
推荐指数
2
解决办法
1153
查看次数

函数返回"无解"而不是"无"

我有一个表示谓词逻辑公式的标准数据类型.表示析出的自然演绎消除规则的函数可能如下所示:

d_el p q =
  if p =: (Dis r s) && q =: (Neg r) then Just s else
  if q =: (Dis r s) && p =: (Neg r) then Just s else
     Nothing where r,s free

x =: y = (x =:= y) == success
Run Code Online (Sandbox Code Playgroud)

在统一失败时,该函数不返回Nothing,而是返回以下解决方案PACKS:

logic> d_el (Dis Bot Top) (Not Bot)
Result: Just Top
More Solutions? [Y(es)/n(o)/a(ll)] n
logic> d_el (Dis Bot Top) (Not Top)
No more solutions.
Run Code Online (Sandbox Code Playgroud)

我错过了什么,为什么在统一失败时不el评价Nothing

functional-programming logic-programming curry maybe

9
推荐指数
1
解决办法
359
查看次数

在Haskell中合并/追加Justs

我试图去做我们必须在Haskell,这是去是再明显Just [1]Just [2]Just [1, 2].但是我在网上找不到任何东西,因为我一直在寻找相关但无益的页面.那么,你是如何实现这一目标的?

monads haskell applicative maybe

9
推荐指数
1
解决办法
509
查看次数

正确的方法强制转换可能a到a在榆树,没有明确失败的Nothings

好吧,我真正想做的是,我有一个数组,我想从中选择一个随机元素.显而易见的是从0和长度减1之间的随机数生成器获取一个整数,我已经工作了,然后应用Array.get,但返回一个Maybe a.(似乎还有一个包函数可以做同样的事情.)来自Haskell,我得到的类型意义是它保护我免受我的索引超出范围的情况,但我控制了索引而不是期待这种情况发生,所以我只想假设我得到了Just一些东西并且有点强行转换为a.在哈斯克尔fromJust,如果我感到冗长,那将是或者fromMaybe (error "some message").我应该怎么做榆树?

在邮件列表上发现了一个似乎正在讨论这个问题的讨论,但它已经有一段时间了,我没有在标准库中看到我想要的功能,而讨论表明它会是这样.

以下是我发现的一些非常不满意的潜在解决方案:

  • 只需使用默认.我确实有一个默认值aavailable,但我不喜欢这个,因为它给我的代码带来了完全错误的含义,并且可能会使调试变得更加困难.
  • 做一些摆弄端口与Javascript接口,并获得一个异常抛出,如果它没有.我还没有仔细研究它是如何工作的,但显然它是可能的.但这似乎混淆了过多的依赖关系,否则简单纯粹的榆树.

maybe elm

9
推荐指数
2
解决办法
3262
查看次数