假設兩個新類型都是這樣在推斷爲FMAP ADT的
type MyProductType a = (FType1 a, FType2 a)
type MyCoproductType a = Either (FType1 a) (FType2 a)
定義......這FType1
和Ftype2
是Functor
兩個實例。
如果現在要宣佈MyProductType
和MyCoproductType
爲Functor
情況下,將編譯器需要各自fmap
的明確的定義,也可以推斷從以前的這些定義?
此外,這個問題的答案是實現相關的,還是從Haskell規範?
這種背景下,這個問題是由試圖作出發言的感something I'm reading動機。筆者首先界定
type Writer a = (a, String)
...後來寫道(我的重點)
...的
Writer
類型構造是a
函子。 我們甚至不需要執行fmap
,因爲它只是一個簡單的產品類型。
強調的文字是我試圖理解的評論。我以爲這意味着,哈斯克爾可以根據函子類型推斷fmap
的爲任何 ADT,並且,特別是,它可以推斷fmap
一個‘簡單的產品類型’之類Writer
,但現在我認爲這種解釋是不正確(至少如果我正確閱讀ØrjanJohansen的答案)。
至於作者所說的那句話,現在我真的沒有線索。也許他的意思是,以這樣一種方式重新定義Writer
是不值得的,因爲它的功能性可以明確,因爲它是一個「簡單...類型」。 (救命稻草這裏抓。)
你不能聲明他們'Functor',因爲已經有'(,)'和'Either'的實例。如果您使用'newtype',則可以使用['GeneralizedNewtypeDeriving'](https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/deriving.html#newtype-deriving)推導實例。 –
你可以使用'fmap fmap fmap'來映射內函數的函數。 – bheklilr