2011-04-03 77 views
0

我對使用Functor感到困惑是Functor用於定義映射的屬性以及如何在Haskell中定義映射的屬性?

是Functor用於定義映射的屬性以及如何在Haskell中編寫映射的屬性?

如果是這樣,可以Haskell中被用於產生寫入

類型或類聲明的格式不正確的頭後定義函數或其他東西:流XY

import Control.Applicative 

class flow x y where { f :: x y -> x; } // this line i do not know whether is enforced to write 
             // how to write this map 

instance flow Int Int where 
flow t flow(s, p) = flow(t+s, p) 
flow 0 p = p 

是否有更多的可運行的示例,而不是Haskell的定義,這將是更好

當我替換在谷歌發現,通常無法運行示例中的屬性,或其片段

當使用關於映射的例子時,例如A→B,有數據A首先定義數據B,但不知道爲什麼使用數據作爲定義的類型,當我讀到範疇理論時,有箭頭和對象 都是Hom,Functor從Hom到Hom,是不是代表Hom?

當與Singular軟件比較時,我變得更加混亂。坎是kontraHom和Kohom的一個運營商,並且採用兩個矩陣。

待辦事項坎在哈斯克爾不同的含義和奇異

+0

** 1 **你知道什麼是類型類? ** 2。**您是否重新定義了Functor? – kennytm 2011-04-03 09:04:23

+0

你的代碼看起來很奇怪。你試圖實現什麼? – fuz 2011-04-03 09:33:35

+0

您的代碼無效Haskell。這是混亂無效。你想寫什麼? – 2011-04-03 09:41:41

回答

2

單數是一個計算機代數系統。 Haskell是一種可以在其中實現計算機代數的編程語言。在嘗試查看分類/代數圖片之前,您需要簡單地開始學習基本的Haskell語法和概念,特別是因爲不同的元素可以以不同的方式實現。

但是,讓我們嘗試一些簡單的建立共同語言。我給這裏的筆記應該是這裏的待遇是一致的:http://en.wikibooks.org/wiki/Haskell/Category_theory

一種方法是描述類別HaskHask的對象都是Haskell類型。 Hask包含函數類型以及對,因此它是笛卡兒式關閉的,並且它的所有箭頭都與對象同構。在分類術語中,同名集合是兩個對象之間所有態射的集合。因此,(Int,Float)上的集合是將Int轉換爲Float的所有函數的集合。

分類上,類別X和Y之間的仿函數將X的對象發送給Y,將X的箭頭髮送給Y.因此它還將X的同名集合(箭頭集合)發送到Y.

Haskell中的Functor類提供了使用分類仿函數獲得的部分內容。它提供發送箭頭上的對象在Hask於箭頭上的一些其他類別(在我們的情況下,也必須從Hask組成一些對象)的操作fmap。它可以將值的函數發送到值列表上的函數,或者將值函數發送到包含值的對上的函數等。

所有這一切,我都會推薦學習Haskell,而不用考慮編寫類型類或實例一段時間。堅持顯式數據聲明和函數,直到您更熟悉該語言的基本功能。

1

於解決眼前的混亂的企圖,Haskell的仿函數定義了一個結構,你可以「地圖」上,通過指定「FMAP」(這樣的實現是,在Haskell中,您可以使用Functor類型類的實例來指定特定結構的fmap實現)

您提供的代碼在兩個方面存在問題:i)Haskell已經提供了一個函子(no需要重新定義類;相反,您需要定義Functor類的「實例」); ii)您需要遵守Functor界面。

雖然我可以提出一個更全面的資源(強烈推薦的是這本書「真實世界哈斯克爾」),如果你絕對需要更多地瞭解如何處理函子Haskell的實例,一個優秀的文章是http://www.haskell.org/haskellwiki/Monads_as_containers (每Monad是Functor)。