Agda2
eye
[info]voidex
Ковыряю Agda2
module if where

open import proof
open import bool

open import list

if_then_else_ : ∀ {l} {a : Set l} → (p : bool) → ((p ≡ true) → a) → a → a
if true then t else f = t refl
if false then t else f = f

head₀ : ∀ {l} {a : Set l} → (ls : list a) → (not (empty ls) ≡ true) → a
head₀ {_} {_} null ()
head₀ {_} {_} (cons x xs) p = x

test₁ : ∀ {l} {a : Set l} → list a → a → a
test₁ ls v = if (not (empty ls)) then head₀ ls else v

test₂ : ∀ {l} {a : Set l} → a → a
test₂ v = head₀ (singleton v) refl
Tags: ,
  • Add to Memories

Agda2
eye
[info]voidex
Наткнулся случайно на такие дела.
Это же замечательно:
record Monad {o ℓ e} (C : Category o ℓ e) : Set (o ⊔ ℓ ⊔ e) where
  field
    F : Endofunctor C
    η : NaturalTransformation id F
    μ : NaturalTransformation (F ∘ F) F

  open Functor F

  field
    .assoc : μ ∘₁ (F ∘ˡ μ) ≡ μ ∘₁ (μ ∘ʳ F)
    .identityˡ : μ ∘₁ (F ∘ˡ η) ≡ idN
    .identityʳ : μ ∘₁ (η ∘ʳ F) ≡ idN
Tags: ,
  • Add to Memories

Klesli + List 2
eye
[info]voidex
В прошлой записи мне дали ценные подсказки. Во-первых, проблема в том, что sequence не удовлетворяет требованиям и потому монадический трансформер из списка так просто не получить. Во-вторых, был задан более общий вопрос: переносится ли эндофунктор над Set в эндофунктор над Клейсли-категорией.
Посоставляв диаграммы (которых я тут не приведу), я пришёл к выводу, что да, если коммутирует левая-верхняя диаграмма оттуда же (остальные мне не пригодились), что для списка наверняка не верно (хотя я не проверил).
Т.е. если можно получить монаду над ST, используя натуральное преобразование TS -> ST, то можно и эндофунктор T перенести на категорию Клейсли (с монадой S). Однако данные требования избыточны, так как мы не комбинируем монады, а переносим эндофунктор.
Есть для этого какое-то название и не налажал ли я, не знаю.

  • Add to Memories

Kleisli + List
eye
[info]voidex
Возьмём Клейсли-категорию для монады Writer. Затем определим функтор такой, что
F(a) = 1 + a * F(a) -- список
F(f) = id + f * F(f)
  -- null -> null
  -- (x, xs) -> (f x, F(f) xs)

где + и * в F(f)choose и parcomp

Но в таком случае, если я ничего не путаю, не соблюдается F(f . g) = F(f) . F(g)

Действительно, возьмём f, пишущий "f" и возвращающий свой аргумент, и g — пишущий "g".
Тогда f . g допишет "fg".
F(f) [1,1,1] — "fff"
F(g) [1,1,1] — "ggg"
F(f . g) [1,1,1] — "fgfgfg"
F(f) . F(g) [1,1,1] — "fffggg"


Кто виноват и что делать?
  • Add to Memories

ICFPC 2011
eye
[info]voidex

С радостью присоединюсь к команде. Поучаствовать хочется, но одному слишком напряжённо, так что зовите. Умею держать свечку и варить кофе.

Tags: ,
  • Add to Memories

Windows Live Writer
eye
[info]voidex

Поставил до кучи, заодно решил проверить.

society_by_gloom82-d36que5-ggggg

Read more... )
  • Add to Memories

enumFromThenTo
eye
[info]voidex
last ([0, 1 / 13 .. 1] :: [Double]) <= 1
False

Что же это такое творится?
Tags: ,
  • Add to Memories

Rotary
eye
[info]voidex
Tags: ,
  • Add to Memories

PNG + JPEG
eye
[info]voidex
Не могу поверить, что на hackage нету биндингов к libpng + libjpeg, или хоть чего-нибудь, позволяющего играючи, легко и просто загрузить JPEG/PNG/GIF/BMP.
Может, я всё-таки слепой или не так ищу?

update: таки слепой, Codec.Image.STB
Tags: ,
  • Add to Memories

Building DLL in GHC
eye
[info]voidex
По умолчанию GHC не умеет собирать нормальный DLL под Windows (как с этим в других системах, я не знаю). Поэтому я написал для себя модуль (код ужасен, я знаю, я взял половину из туториала, половину наваял на скорую руку и вынес, лишь бы оно собирало мой код), для которого достаточно определить дополнительный раздел в CABAL — x-export, внутри которого перечислить модули, содержащие экспортируемые функции. Точнее, там нужен список модулей, которые будут добавляться в рантайм при помощи hs_add_root.
Правильно ли я понимаю, что на других системах с этим проблем нет? Т.е. всей этой свистопляской надо заниматься только под Windows? Если да, то в defaultDll, видимо, не нужно предпринимать каких-либо дополнительных действий, если система отлична от Windows.
Tags: , ,
  • Add to Memories

You are viewing [info]voidex's journal