[英]Define return type IO [a] Haskell
我想返回預期的IO類型[a]
我試過了:我想要的類型
fc :: [a] -> IO [a]
fc a = sequence $ map show list
> fc [1,2,3]
> [1,2,3]
我能做什么?
如果您有一個純值,則轉換為單值的方法是使用return
(aka pure
)函數:
fc :: [a] -> IO [a]
fc list = return list
但是,如果要將show
函數映射到列表中,結果將為[String]
,因為函數show :: a -> String
會將任何值轉換為String
,因此:
fc :: Show a => [a] -> IO [String]
fc list = return $ map show list
注意Show a
約束。 它告訴編譯器,無論類型a
是什么,都必須支持show
函數。 沒有它,該功能將無法進行類型檢查。
sequence
函數完全位於該點的旁邊,因為它將單價值列表轉換為一個單價值列表。 如果要使用該函數,則傳遞給它的列表必須是單子值列表,例如:
fc :: Show a => [a] -> IO [()]
fc list = sequence $ map print list
在這里, print
是一個IO ()
操作,它打印出一個值。
如果您想要更精確的答案,則需要更明確地指定要執行的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.