News Free software and hardware compatibility To be able to run free software you need compatible hardware. Sure you can use some of them on windows or macos but those OSes are not examples of free

News News about LibreTech Retrospective on 2020 Last year I have contacted the French minister of education, the academy of reunion island and I have participated in the national survey about the new technologies. Needless to say that I took quite some time to explain the necessity to

SDL2 A Guide to SDL2 Simple DirectMedia Layer is a C library providing low level access to audio, keyboard, mouse, joystick, and graphics.

Roguelike Writing a Roguelike in Guile Beginner's guide to roguelike: No hubris; Plan ahead; Prepare to die.

Data Structure Purely Functional Data Structure: Catenable Deque Deque module Deque where class Deque q where empty :: q a isEmpty :: q a -> Bool cons :: a -> q a -> q a head :: q a -> a tail :: q a -> q a snoc :: q a -> a -> q a last

Data Structure Purely Functional Data Structure: Catenable List Catenable list A catenable list extends list with efficient append operation using the bootstrapping technique known as structural abstraction. module CatenableList where class CatenableList c where empty :: c a isEmpty :: c a -> Bool cons :: a -> c a -> c a snoc :: c

Data Structure Purely Functional Data Structure: Sortable Sortable {-# LANGUAGE MultiParamTypeClasses #-} module Sortable where class (Ord a) => Sortable s a where empty :: s a add :: a -> s a -> s a sort :: s a -> [a] open Ordered module type Sortable = sig module Elem : Ordered type sortable val empty

Data Structure Purely Functional Data Structure: Finite Map Finite Map {-# LANGUAGE MultiParamTypeClasses #-} module FiniteMap where class FiniteMap m k where empty :: m k a bind :: k -> a -> m k a -> m k a lookup :: k -> m k a -> Maybe a module type FiniteMap = sig type

Data Structure Purely Functional Data Structure: Binary Binary Dense The representation of a positional number system is dense when represented as a sequence of digit including 0. module BinaryNumberDense where data Digit = Zero | One type Nat = [Digit] inc :: Nat -> Nat inc [] = [One] inc (Zero:xs) = One : xs inc (One:xs)

Data Structure Purely Functional Data Structure: Random Access List Random Access List A random access list is a data structure that supports array-like search and update function and head, cons, tail functions in list. Its implementation requires a binary

Data Structure Purely Functional Data Structure: Deque Deque A Deque or (double ended queue) is similar to a queue but elements can be inserted at both end. module Deque where class Deque q where empty :: q a isEmpty :: q a -> Bool cons :: a -> q a -> q a head

Data Structure Purely Functional Data Structure: Queue A queue is represented with a front and tail list. In the front list, elements are sorted and in the tail list they are in reverse order. Queue module Queue

Data Structure Purely Functional Data Structure: Heap Heap A Heap or priority queue is a tree-based data structure allowing efficient access to the highest priority element according to the heap property. module Heap where class Heap h

Data Structure Purely Functional Data Structure: Stream A Stream is a lazily evaluated sequence. Haskell being a lazy languague, Stream Eq List. module type Stream = sig type 'a stream_cell = Nil | Cons of 'a * 'a stream and

Data Structure Purely Functional Data Structure: Set Set A set is an unordered collection of elements without duplicates. {-# LANGUAGE MultiParamTypeClasses #-} module Set(Set(..)) where class Set s a where empty :: s a insert :: a ->

Data Structure Purely Functional Data Structure: Stack A sequence is an ordered collection of elements, that may contains duplicates. A stack is a sequence where the last element added to the structure is the first to be