2011-04-03 78 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)。