簡體   English   中英

如何在更高階中使用 Maybe function haskell?

[英]How to use Maybe in higher order function haskell?

我想解決以下 f 返回 Nothing 的問題,然后刪除第一個元素。 如果 f 返回 Just x,則第一個元素將更改為 x。 我下面的答案適用於 Nothing 但我不明白如何區分 Nothing 和 Just 在 function

change:: (a -> Maybe a) -> [a] -> [a]
change f [] = []
change f (x:xs) = xs

改變(\x -> 無)[1..5] == [2..5]

change(\x -> 僅 10) [1,2,3] == [10,2,3]

對於一個簡單的解決方案,您可以像這樣在fx上進行模式匹配(使用case ):

change:: (a -> Maybe a) -> [a] -> [a]
change _ [] = []
change f (x:xs) =
   case f x of
       Just x' -> x':xs
       Nothing -> xs

那應該做你描述的


對於較短的,您可以使用maybeToList並像這樣連接部分:

change:: (a -> Maybe a) -> [a] -> [a]
change _ [] = []
change f (x:xs) = (maybeToList $ f x) ++ xs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM