LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

Так все осиальное на том же уровне - устаревшие банальности и тривиальщина.

А зависимые типы — банальность и тривиальщина 40-ей давности? Тем не менее, оно развивается и уже работает (как пруф-чекеры, как минимум).

Или, например, generics (про которые те два тезиса) работают — чтобы сделать свой «msgpack» в хаскеле можно положиться на автоматические deriving и instance (Generic строит модель типа на суммах/произведениях — Binary её использует):

{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}

import Data.Binary
import Data.ByteString
import GHC.Generics

data Msg
  = Fix !Int
  | Flt !Double
  | Str !ByteString
  | Arr ![Msg]
  deriving (Show, Eq, Generic)

instance Binary Msg

msg = Arr [Fix (2 ^ 63 - 1), Flt 1e73, Str "1234567890"]
en = encode msg
-- Data.ByteString.Lazy.length en == 63
de = decode en :: Msg
t1 = msg == de

Исходная версия quasimoto, :

Так все осиальное на том же уровне - устаревшие банальности и тривиальщина.

А зависимые типы — банальность и тривиальщина 40-ей давности? Тем не менее, оно развивается и уже работает (как пруф-чекеры, как минимум).

Или, например, generics (про которые те два тезиса) работают — чтобы сделать свой «msgpack» в хаскеле можно положиться на автоматические deriving и instance (Generic строит модель типа на суммах/произведениях — Binary её использует):

{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}

import Data.Binary
import Data.ByteString
import GHC.Generics

data Msg
  = Fix !Int
  | Flt !Double
  | Str !ByteString
  | Arr ![Msg]
  deriving (Show, Eq, Generic)

instance Binary Msg

msg = Arr [Fix (2 ^ 63 - 1), Flt 1e73, Str "1234567890"]
en = encode msg
de = decode en :: Msg
t1 = msg == de