Skip to content

Instantly share code, notes, and snippets.

@deniok
deniok / Fp09.hs
Created October 30, 2019 18:14
FP_BSSE2019Fall_09
module Fp09 where
import Control.Applicative (Alternative(..),optional,ZipList(..))
import Data.Char (isLower,isUpper,digitToInt,isDigit)
import Data.Monoid (Alt(..),Ap(..),Sum(..))
import Data.Functor.Identity (Identity(..))
newtype Parser tok a =
Parser { runParser :: [tok] -> Maybe ([tok],a) }
{-# LANGUAGE Rank2Types #-}
module Fp15SimpleLens where
{-
Линза - инструмент для манипулирования элементом типа a некоторой структуры данных типа s,
находящимся в фокусе этой линзы.
Технически линза - это АТД составленный из пары геттер-сеттер
lens :: (s -> a) -> (s -> a -> s) -> Lens s a
Законы:
@deniok
deniok / LamInhab.hs
Last active September 28, 2022 08:07
Поиск обитателей типа для просто типизированного лямбда-исчисления
{-# LANGUAGE FlexibleContexts #-}
module LamInhab where
import Data.List (insertBy)
import Control.Monad.State
-- Тип символов
type Symb = String
infixl 2 :@
{-
Определим на Агде интуиционистскую логику высказываний
-}
module PropCalculusMini where
{-
Задаём стандартные приоритеты и ассоциативность
для логических связок
-}
module FilterEtAl where
data Bool : Set where
false : Bool
true : Bool
data : Set where
zero :
suc : (n : ℕ)
-- Законы аппликативных функторов выполняются для
-- стандартного представителя (Either e)
instance Applicative (Either e) where
pure = Right
Left e <*> _ = Left e
Right f <*> r = fmap f r
instance Functor (Either a) where
@deniok
deniok / Fp06.hs
Created March 23, 2013 18:25
ФП АУ код к лекции 6
{-# OPTIONS_GHC -XStandaloneDeriving #-}
module Fp06 where
-- Производные представители (Derived Instances)
data Point a = Point a a deriving Eq
-- (Pt 3 5) == (Pt 3 5)
-- В GHC можно и отдельно (с ключом -XStandaloneDeriving)
@deniok
deniok / Fp05.hs
Created March 23, 2013 18:19
ФП АУ код к лекции 5
module Fp05 where
-- переставляет элементы пары местами (определена в Data.Tuple)
swap :: (a,b) -> (b,a)
swap (x,y) = (y,x)
-- перечисление
data Color = Red | Green | Blue | Indigo | Violet deriving Show
@deniok
deniok / Fp04.hs
Created March 23, 2013 18:16
ФП АУ, код к лекции 4
module Fp04 where
x = 2 -- глобальное
y = 42 -- глобальное
foo = let z = x + y -- глобальное (foo) локальное (z)
in print z -- отступ (layout rule)
add x y = x + y -- определение add
add' x = \y -> x + y
add'' = \x y -> x + y