Spec-Zone.ru › Haskell 9

Control.Category

Авторские права (c) Ashley Yakeley 2007
Лицензия BSD-стиль (см. файл LICENSE в дистрибутиве)
Поддерживающий ashley@semantic.org
Стабильность стабильная
Переносимость переносимая
Safe Haskell Безопасный
Язык Haskell2010

Содержание

  • Класс
  • Комбинаторы

Описание

Класс

class Category (cat :: k -> k -> Type) where Источник

Класс для категорий.

В математике, категория определяется как набор объектов и набор морфизмов между объектами, вместе с тождественным морфизмом id для каждого объекта и операцией (.) для композиции совместимых морфизмов.

Этот класс определен аналогичным образом. Множество морфизмов представлено параметром типа cat, который имеет вид k -> k -> Type для некоторой переменной вида k , представляющей множество объектов; большинство времени выбор k будет Type.

Примеры
Развернуть

Как подсказывают имена методов, существует категория функций:

instance Category (->) where
  id = \x -> x
  f . g = \x -> f (g x)

Изоморфизмы также образуют категорию:

data Iso a b = Iso (a -> b) (b -> a)

instance Category Iso where
  id = Iso id id
  Iso f1 g1 . Iso f2 g2 = Iso (f1 . f2) (g2 . g1)

Естественные преобразования — еще один важный пример:

newtype f ~> g = NatTransform (forall x. f x -> g x)

instance Category (~>) where
  id = NatTransform id
  NatTransform f . NatTransform g = NatTransform (f . g)

Используя расширение языка TypeData, мы также можем создать категорию, где k не Type, а специальный вид Door:

type data Door = DoorOpen | DoorClosed

data Action (before :: Door) (after :: Door) where
  DoNothing :: Action door door
  OpenDoor :: Action start DoorClosed -> Action start DoorOpen
  CloseDoor :: Action start DoorOpen -> Action start DoorClosed

instance Category Action where
  id = DoNothing

  DoNothing . action = action
  OpenDoor rest . action = OpenDoor (rest . action)
  CloseDoor rest . action = CloseDoor (rest . action)

Методы

id :: forall (a :: k). cat a a Источник

Тождественный морфизм. Реализации должны удовлетворять двум законам:

Правильный закон тождества
f . id = f
Левый закон тождества
id . f = f

По существу, это означает, что id не должен «ничего делать».

(.) :: forall (b :: k) (c :: k) (a :: k). cat b c -> cat a b -> cat a c infixr 9 Источник

Композиция морфизмов. Реализации должны удовлетворять закону:

Ассоциативность
f . (g . h) = (f . g) . h

Это означает, что порядок группировки морфизмов не имеет значения, поэтому можно однозначно записать композицию морфизмов как f . g . h, без скобок.

Экземпляры
Подробности о экземплярах
Category Op Источник
Подробности о экземпляре

Определено в Data.Functor.Contravariant

Методы

id :: Op a a Источник

(.) :: Op b c -> Op a b -> Op a c Источник

Monad m => Category (Kleisli m :: Type -> Type -> Type) Источник

С версии: base-3.0

Подробности о экземпляре

Определено в GHC.Internal.Control.Arrow

Методы

id :: Kleisli m a a Источник

(.) :: Kleisli m b c -> Kleisli m a b -> Kleisli m a c Источник

Category (Coercion :: k -> k -> Type) Источник

С версии: base-4.7.0.0

Подробности о экземпляре

Определено в GHC.Internal.Control.Category

Методы

id :: forall (a :: k). Coercion a a Источник

(.) :: forall (b :: k) (c :: k) (a :: k). Coercion b c -> Coercion a b -> Coercion a c Источник

Category ((:~:) :: k -> k -> Type) Источник

С версии: base-4.7.0.0

Подробности о экземпляре

Определено в GHC.Internal.Control.Category

Методы

id :: forall (a :: k). a :~: a Источник

(.) :: forall (b :: k) (c :: k) (a :: k). (b :~: c) -> (a :~: b) -> a :~: c Источник

Category (->) Источник

С версии: base-3.0

Подробности о экземпляре

Определено в GHC.Internal.Control.Category

Методы

id :: a -> a Источник

(.) :: (b -> c) -> (a -> b) -> a -> c Источник

Category ((:~~:) :: k -> k -> Type) Источник

С версии: base-4.10.0.0

Подробности о экземпляре

Определено в GHC.Internal.Control.Category

Методы

id :: forall (a :: k). a :~~: a Источник

(.) :: forall (b :: k) (c :: k) (a :: k). (b :~~: c) -> (a :~~: b) -> a :~~: c Источник

Комбинаторы

(<<<) :: forall {k} cat (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c infixr 1 Источник

Композиция справа налево. Это синоним для (.), но может быть полезно для того, чтобы сделать порядок композиции более очевидным.

(>>>) :: forall {k} cat (a :: k) (b :: k) (c :: k). Category cat => cat a b -> cat b c -> cat a c infixr 1 Источник

Композиция слева направо. Это полезно, если вы хотите написать морфизм как конвейер, идущий слева направо.

Примечание о конфликтах имен

Методы из Category конфликтуют с id и . из прелюдии; вам, вероятно, потребуется либо импортировать этот модуль с квалификатором, либо скрыть функции прелюдии:

import Prelude hiding (id, (.))

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.12.1/docs/libraries/base-4.21.0.0-8e62/Control-Category.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API