[英]Most efficient or idiomatic way to test singleton list contents in Haskell?
[英]What is the idiomatic way to refer to a singleton list constructor in Haskell?
簡短形式:是否有更慣用的寫作方式(\\a->[a])
?
長格式:對於任何數據類型Foo a
,如果我有一個函數f :: Foo a -> b
,我需要寫一些像...
wrapAndF a = f $ Foo a
......我可以通過寫作使它無點
wrapAndF = f . Foo
但是如果我的函數g :: [a] -> b
在列表上運行,我的包裝器就像這樣...
wrapAndG a = g [a]
...最簡單的寫點是什么? 我知道我可以寫一個明確的lambda:
wrapAndG = g . (\x->[x])
或者,在Foo示例中鏡像構造函數的使用,使用列表構造函數(:)
,但是我必須翻轉參數:
wrapAndG = g . flip (:) []
...但是,引用單例列表構造函數的慣用方法是什么? 我期望找到一個帶有簽名a -> [a]
的標准函數,但我在Hoogle或Data.List上找不到它。
當然可以選擇簡單地不用無點編寫(這當然是一個有效的答案)但是由於將類型構造函數作為包裝函數傳遞似乎非常有用,因此我覺得很難找到一個標准函數來包裝一個值到列表中,所以我想我可能會遺漏一些東西。
對於列表pure
做你想要的:
wrapAndG = g . pure
如果您需要特定於列表的內容,則回復user2407038和chi, (:[])
的注釋是一種很好的拼寫方式:
wrapAndG = g . (:[])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.