Skip to content

Instantly share code, notes, and snippets.

View ashalkhakov's full-sized avatar

Artyom Shalkhakov ashalkhakov

View GitHub Profile
@ashalkhakov
ashalkhakov / monads.dats
Created December 31, 2014 15:32
Encoding monads in ATS2 with function templates
(* ****** ****** *)
// Monads in ATS2 using templates
#include
"share/atspre_define.hats"
(* ****** ****** *)
// the interface
abst@ype M (t@ype)
@ashalkhakov
ashalkhakov / template-view-eq.dats
Last active August 29, 2015 14:17
View equalities in templates
#include
"share/atspre_staload.hats"
staload UN = "prelude/SATS/unsafe.sats"
#define N 5
extern
fun{env:vt@ype}
loop$fwork (natLt(N), &(env) >> _): void
// License: BSD 3-clause
// Author: Artyom Shalkhakov
// Date: Sep 22, 2015
//
// About: this is a POC of n-tuples and row types implemented
// using Reflection.Emit. The mutation interface (get/set methods)
// involves no boxing, but the caller has to supply the type parameter
// that matches the type of the value at the given position. Position
// is resolved using a jump table (TODO: does it translate to threaded
// code?).
@ashalkhakov
ashalkhakov / dynamic.dats
Created October 26, 2012 10:19
Dynamic typing in a statically typed programming language
// compile with atscc, compiler for ATS, an ML dialect
// see <www.ats-lang.org>
staload _ = "prelude/DATS/list.dats"
staload _ = "prelude/DATS/string.dats"
// the type of dynamic terms
// NOTE: using an abstract type here would be true
// to the spirit of dynamically typed languages
datatype DT =
@ashalkhakov
ashalkhakov / unbalacend-parens-js
Last active April 6, 2016 09:55
Question on unbalanced parentheses matching in a given string
(*
** Hello, world!
**
** Q: how to extract substring of input string ending at the first unclosed parens?
** ex. sldfkjsf(sldfkj)lskdjff(sdfsdf) -- this is balanced, return as-is
** ex. (sldfkj(sdfsdf(sdfsdf(sdfsdf)sdf)sdf)sdfsdf -- this is NOT balanced, first paren is unclosed (result should be empty)
** ex. esdfd((esdf)(esdf -- first paren is unclosed, should give esdfd
** A: see below
*)
(*
** Hello, world!
** Q: what's a good way to *not* mix up = and == operators in a conditional?
** A: a good way is via typed programming
*)
(* ****** ****** *)
#include
"share/atspre_define.hats"
//
// A simple example of C-union
//
(* ****** ****** *)
//
// Author: Hongwei Xi
// Authoremail: gmhwxiATgmailDOTcom
// Start time: November, 2013
//
(* ****** ****** *)
#include
"share/atspre_staload.hats"
(* ****** ****** *)
(* operator interface *)
datatype assoc = ASSOCnone | ASSOCleft | ASSOCright
extern
fun
eq_assoc_assoc (assoc, assoc):<> bool
@ashalkhakov
ashalkhakov / ats-syntax-hilighting-monaco
Created June 27, 2016 15:54
ATS/Postiats syntax hilighting support for the Monaco editor.
// see: https://microsoft.github.io/monaco-editor/monarch.html
// ATS/Postiats lexical syntax definition
// Written by Artyom Shalkhakov over the week of 20th - 27th of June, 2016.
// License: BSD v3 (but probably GPL, since ATS/Postiats lexer is GPL? not a lawyer!)
// TODO: staload and dynload are followed by a special kind of string literals
// with {$IDENTIFER} variables, and it also may make sense to highlight
// the punctuation (. and / and \) differently.
(*
** Hello, monadic world!
**
** Author: Artyom Shalkhakov
** artyom DOT shalkhakov AT gmail DOT com
**
** Can be run using:
** http://www.ats-lang.org/SERVER/MYCODE/Patsoptaas_serve.php
*)