簡體   English   中英

哈斯克爾:在莫納德做符號並返回

[英]Haskell: do notation and return in Monads

假設我有以下代碼

do {x <- (Just 3); y <- (Just 5); return (x:y:[])}

哪個輸出Just [3,5]

haskell如何知道輸出值應該在Maybe monad中? 我的意思是return可以輸出[[3, 5]]

do {x <- (Just 3); y <- (Just 5); return (x:y:[])}

des to to to

Just 3 >>= \x -> Just 5 >>= \y -> return $ x:y:[]

由於>>=的類型是Monad m => ma -> (a -> mb) -> mb和每個參數Just 3 (或者Just 5 )我們有m ~ Maybe ,表達式的返回類型必須是一些Maybe類型。


有可能使用類別理論中的 自然變換來回報[[3, 5]] 因為存在從Maybe a[a]的自然轉換,即

alpha :: Maybe a -> [a]
alpha Nothing  = []
alpha (Just a) = [a]

我們有你想要的功能只是應用於結果的自然變換:

alpha (Just 3 >>= \x -> Just 5 >>= \y -> return $ x:y:[])
-- returns [[3, 5]]

由於這是一個自然轉換,您還可以先應用alpha ,然后再應用第二個函數:

alpha (Just 3) >>= \x -> alpha (Just 5) >>= \y -> return $ x:y:[]
-- returns [[3, 5]]

正如@duplode指出的那樣,你可以在包Data.Maybe找到alpha作為maybeToList

暫無
暫無

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

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