[英]Haskell: check the length of IO [Double]
給定IO [Double]
類型的列表,我希望能夠檢查列表是否具有所需的長度。
我猜我需要在這里使用仿函數,但我不明白如何定義它。 我是否編寫了長度函數的仿函數實例? 或者我是否編寫了一個使用fmap
的length函數的數據類型的fmap
函數fmap
?
Monads,仿函數等對我來說都是新手。
類型IO [Double]
值沒有長度,因為它不是雙打列表,而是IO動作,執行時將生成雙打列表。 因此,不可能編寫IO [a] -> Int
類型的函數。
但是,您可以輕松編寫IO [a] -> IO Int
類型的函數,這與fmap length
一樣簡單。
最有可能的是,您要做的是獲取列表,然后計算它的長度。 通常,您需要使用符號表示(盡管並非絕對必要)。
Haskell封裝IO monad中的所有IO,因此您只能從IO a
類型的另一個對象中的IO [Double]
獲取列表。 代碼看起來像這樣 -
main::IO ()
main = do
theList <- getList --or whatever your object of type IO [Double] is
let theLength = length theList
.... -- Do stuff with theLength here
到目前為止發布的兩個答案都是正確的,也是解決這個問題的好方法,但是我想指出第三種語法來實現同樣的效果。 這實際上是jamshidh的答案減去了do
-notation的語法糖:
ioLength :: IO [Double] -> IO Int
ioLength a = a >>= (\x -> return $ length x)
或者,更簡潔:
ioLength a = a >>= (return . length)
如果進一步濃縮,會產生合金的答案 :
ioLength = fmap (length)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.