簡體   English   中英

Haskell:檢查IO的長度[Double]

[英]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.

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