2013-07-01 44 views
7

在我看來,在Data.Monoid中沒有辦法向Monoid注入單個值。我猶豫爲此使用Data.Monad.return,但希望能找到類似singleton的幾種類型。如何將值注入Monoid?

+5

「Monoid」只是一個帶有「Monoid」實例的類型,它不是一個容器(通常情況下)將值注入到其中。例如,有一個「實例Monoid Ordering」,爲此你有三個(非底部)值'LT','EQ','GT',沒有什麼可以注入的,只需寫入值即可。 –

+2

它會有什麼類型? 'singleton :: Monoid m => a - >' –

+0

@AlexeyRomanov'singleton x = mempty' :)(非常有用) –

回答

15

Monoid類不允許任何類型的注入,因爲monoid不是任何類型的容器。有些容器是monoids,然後他們將有自己的注射手段。對於相對普通的注射劑,您可以使用ApplicativepureMonadreturn(前者更一般)。

+0

嗯...那麼...是否有一個理論接地類包裝了'Containers '? – fho

+12

@Florian:具有此「注入」操作的類型構造函數,但不一定是'Applicative',稱爲['Pointed'](http://hackage.haskell.org/packages/archive/pointed/3.0.3/doc/ HTML /數據Pointed.html)。 – leftaroundabout

6

添加到別人所說的內容:Int形成一個monoid(以幾種不同的方式)。你將如何「注入」一個值到Int?那麼,你沒有; Int只是一個Int。你可以使用零或什麼...?

現在,如果有東西一個容器,它形成一個monoid。但是這個幺半物不能幫你把它當作一個容器來對待;你需要爲此嘗試一些其他的東西。許多不是容器的東西形成了monoids。