Skip to content

Instantly share code, notes, and snippets.

View mchav's full-sized avatar

Michael Chavinda mchav

View GitHub Profile
@mchav
mchav / DataFrame.hs
Created January 22, 2024 18:02
DataFrames using GADTs and Dynamic Typing
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE GADTs #-}
module Main where
import Data.Map (Map)
import Data.Type.Equality
import Data.Typeable (Typeable)
import Type.Reflection
@mchav
mchav / AxisAligned.hs
Created January 1, 2022 20:10
A visualization proving that axis aligned rectangles are PAC learnable.
import Control.Monad
import Data.Array
-- A class for axis-aligned rectangles.
-- The rectangle is defined by the left and right most x
-- coordinates. And the left and rightmost y coordinates.
type Point = (Int, Int)
data Rectangle = Rectangle {
project.afterEvaluate {
extensions.compileFrege = {
description = 'Compile Frege to Java'
javaexec {
android.dexOptions.setJavaMaxHeapSize("4g")
android.defaultConfig.setMultiDexEnabled(true)
def libs = project.rootDir.path + "/app/libs".replace('/' as char, File.separatorChar)
def froid = new File(libs + "/froid.jar".replace('/' as char, File.separatorChar))
@mchav
mchav / proguard-rules.pro
Last active April 26, 2017 03:14
Proguard rules for froid apps.
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-optimizationpasses 5
-allowaccessmodification
-dontpreverify
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-keepattributes *Annotation*
@mchav
mchav / CounterActivity.fr
Created January 24, 2017 17:32
Simple Counter in froid using callbacks.
module io.github.mchav.simplecounter.CounterActivity where
import froid.app.Activity
import froid.os.Bundle
import froid.view.View
import froid.widget.Button
import froid.widget.TextView
native module type Activity where {}
@mchav
mchav / CubeActivity.fr
Created January 18, 2017 03:19
Touch rotating cube in Frege on Android. See froid instructions on how to run.
module io.github.mchav.touchcube.CubeActivity where
import froid.javax.microedition.khronos.egl.EGLConfig
import froid.javax.microedition.khronos.opengles.GL10
import froid.java.nio.ByteBuffer
import froid.java.nio.IntBuffer
import froid.app.Activity
import froid.content.Context
@mchav
mchav / Server.fr
Created November 20, 2016 10:30
A simple server in Frege.
module Server where
import frege.java.IO hiding (OutputStream)
data Executor = native java.util.concurrent.Executor
data InetSocketAddress = native java.net.InetSocketAddress where
native new :: Int -> STMutable s InetSocketAddress
import Control.Monad
import Data.Vector hiding (map)
import Prelude hiding (head, tail, length, splitAt)
import System.IO
inversions :: Vector Int -> Int
inversions = snd . countInversions
countInversions :: Vector Int -> (Vector Int, Int)
countInversions xs
54044
14108
79294
29649
25260
60660
2995
53777
49689
9083
@mchav
mchav / inversions.hs
Created June 17, 2016 15:31
Counting inversions Haskell.
import Control.Monad
inversions :: [Int] -> Int
inversions = snd . countInversions
countInversions :: [Int] -> ([Int], Int)
countInversions [] = ([] , 0)
countInversions [x] = ([x], 0)
countInversions arr = let mid = (length arr) `div` 2
left = take mid arr