簡體   English   中英

在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 . (:[])

剛剛找到了答案,感謝pointfree.io ,它與另一個問題相關聯。 編寫wrapAndG一種不錯的,無點的方法是

wrapAndG = g . return

這使用列表是Monad實例的事實。

暫無
暫無

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

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