Главная » Haskell » Модуль Ord

0

предназначен для разгрузки стандартного модуля Prelude. В него вынесено определение класса Ord (см. стр. 121) и определения нескольких десятков экземпляров для этого класса. Использование:

import  Data.Ord

Класс Ord определяет класс типов, в которых имеет смысл отношение порядка. Соответственно, определение этого класса выглядит следующим образом:

class Eq a => Ord a  where compare :: a  ->  a ->  Ordering (<)       :: a ->  a  ->  Bool

(<=)        :: a  -> a ->  Bool (>)       :: a  -> a ->  Bool (>=)        :: a  -> a ->  Bool max        :: a  -> a ->  a

min         ::  a ->  a ->  a

Соответственно,  в рассматриваемом  модуле определены  экземпляры этого класса для следующих типов: All, Any, ArithException, Array, ArrayException, AsyncException,   Bool,   BufferMode,   BufferState,  ByteString,  CCc,   CChar, CClock, CDev,  CDouble, CFloat,  CGid, CIno, CInt,  CIntMax, CIntPtr, CLDouble, CLLong,  CLong, CMode,  CNlink,  COff, Complex, CPid, CPtrdiff,  CRLim,  CSChar, CShort,  CSigAtomic,  CSize, CSpeed,  CSsize,  CTcflag,  CTime, CUChar,  CUInt, CUIntMax, CUIntPtr,   CULLong,  CULong,  CUShort, CUid, CWchar,  CalendarTime, Char,  ClockTime,   Constr,   ConstrRep,  DataRep, Day, Double,  Either,  Errno, Exception,   ExitCode,  FDType,  Fd, Fixed,  Fixity,  Float,  ForeignPtr, FunPtr, GeneralCategory,    Handle,   HandlePosn,    HashData,  IOArray,    IOErrorType,

IOException,  IOMode,  IORef, Inserts,  Int,  Int16, Int32, Int64, Int8,  IntMap, IntPtr, IntSet, Integer, Key, KeyPr, Lexeme,  Map, Maybe, Month, MVar, Ordering, PackedString, Permissions, Product, Ptr, Ratio, SeekMode, Seq, Set, StableName, StablePtr, STArray STRef, Sum,  ThreadId,  TimeDiff, TimeLocale,  Tree,  TVar, TyCon, TypeRep,  UArray,  Unique, Version,  ViewL, ViewR, Word, Word16,  Word32, Word64, Word8, WordPtr и [].

Кроме того, в этом модуле также определены экземпляры класса Eq для кортежей размером от 0 до 14.

Экземпляры этого класса могут быть автоматически  определены для произвольных алгебраических типов данных, чьими компонентами являются исключительно экземпляры этого класса. При определении экземпляров вручную можно определить либо метод compare, либо операцию (<=). Остальные методы выражены через эти два. Использование  метода compare является более эффективным  для сложных типов.

Тип: Ordering

Описание: перечисление, представляющее константы для выражения отношений порядка между значениями, над которыми  возможен  порядок. Значения этого типа возвращаются функцией comparing.

Определение:

data  Ordering

= LT

| EQ

| GT

Конструктор  LT отвечает за отношение «меньше чем». Конструктор EQ отве чает за отношение «равно». И наконец, конструктор GT отвечает за отношение

«больше чем».

Функция: comparing

Описание: весьма полезный комбинатор  для использования в  семействе  функций, оканчивающихся на постфикс «By», которые  обычно принимают на вход функцию для сравнения.

Определение:

comparing  :: Ord a => (b  ->  a)  ->  b ->  b ->  Ordering  comparing  p x  y  = compare (p  x) (p  y)

8.23.     Модуль Ratio

В модуле Ratio дублируются описания типов Ratio и Rational, а также функций для работы с ними. Данный модуль создан в  экспериментальном  порядке в целях постепенной разгрузки  стандартного модуля Prelude.  Все определённые в модуле Ration  программные сущности определены и в модуле Prelude. Использование:

import Data.Ratio

Соответственно, в рассматриваемый модуль вынесены  определения:  алгебраического типа  данных  Ratio   (см.  стр.  112),  синонима Rational  и  функций (%)  (см. стр. 170), numerator  (см.  стр. 148), denominator  (см. стр. 130) и approxRational (см. стр. 126).

Также  в модуле Ratio  определены экземпляры типа Ratio  для  следующих классов: Typeable1, Data, Enum,  Eq, Fractional, NFData,  Num,  Ord, Read, Real, RealFrac и Show.

Источник: Душкин Р. В., Справочник по языку Haskell. М.: ДМК Пресс, 2008. 544 с., ил.

По теме:

  • Комментарии