Code Monkey home page Code Monkey logo

hafly's Introduction

About me

Welcome to my github profile!

I have a wide variety of interests in sofrware development, from functional programming and type theory, formal methods, logic programming, security, GIS, and game development, to UI/UX development. So if you see something that interests you on one of my personal projects, feel free to reach out. Pull requests welcome.

  • ๐Ÿ—จ๏ธ I use he/him pronouns.
  • ๐Ÿ“ซ How to reach me: [email protected]
  • โœ๏ธ I write a blog about math and programming sometimes.
  • ๐Ÿ“š My academic interests also include linugistics, and microtonal music theory.
  • ๐Ÿ’ก Ask me about graded categories.
  • ๐ŸŒณ When I'm not working on cool software projects, I like cooking, music, playing video games, and exploring the outdoors.

What's in a name?

  • sintrastes: "sin trastes" -- Spanish for "without frets" or fretless

My Projects

Programming Languages / DSLs

  • Hafly (WIP): A simple and flexible dynamically typed scripting langauge for embedding into Haskell projects.
  • Meriv (WIP): A statically typed functional-logic language for knowledge representation.
  • idr-pure-prolog: An embedded domain specific for logic programming in Idris.
  • STLK: Serializable and extensible simply-typed lamda calculus EDSL-building framework in Kotlin.

UI/UX Design

  • Iodine: Functional UI toolkit built on top of Jetpack Compose.

Music

  • Xen Fret: A web app for microtonal guitarists.
  • Xen Toolbox: Utility library in Haskell for xenharmonic theory and composition.

Linguistics / NLP

  • Montague: Experimental library and DSL for parsing natural language into structured from using a combination of syntactic and semantic types.
  • hs-nlp: Collection of experiments implementing different forms of natural language processing in Haskell.

GIS

  • MapAlgebra.jl: High-level declarative GIS processing library for Julia.

TAK

  • partech-metadata-utils: Utilities for ATAK designed to develop type-safe interfaces for ATAK core's metadata API.
  • atak-flix-dev: Experiment in building an ATAK plugin using the Flix programming language.

Utilities

  • Kinetix: A small Kotlin DSL for incremental computations.

  • monad-tree: A small Haskell library for a tree monad for nondeterministic computations allowing for different evaluation strategies.

  • buildable-kt: A Kotlin compiler plugin automatically generating a "partial" version of a data class, and some appropriate lenses.

Misc

  • awesome

    • My personal awesome list on a variety of things I find interesting: software engineering, mathematics, urbanism.
  • FlixRP

    • Implementation of a functional reactive programming framework in the Flix programming language.

Some fun stats

hafly's People

Contributors

sintrastes avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

hafly's Issues

Allow for user-defined multiple dispatch

Currently multiple dispatch only works on library-defined functions.

I believe one reason for this is that the user currently has no way of being able to specify type signatures.

We should probably make our type signatures mirror that of Haskell's.

Implement record accessors.

We'll need some way to disambiguate these from function calls, maybe something like:

For an expression x.y:

  1. If x is a record, first check to see if it has any fields y. If so, use y as a record accessor for that field.
  2. Otherwise, check to see if there is a function y that could act on x.

Allow for `Dynamic`s to be displayed properly.

Currently, we have:

> [1,2,3,4.2]
[<<Int>>,<<Int>>,<<Int>>,<<Double>>]

whereas it would be nice if we had:

> [1, 2, 3, 4.2]
[1, 2, 3, 4.2]

Maybe the best approach for this would be to have the interpreter see if there is a show instance for each element of the list, and try to display it that way -- otherwise, falling-back to just displaying the type?

Allow way of specifying variance of Haskell data types.

In order to properly act on Dynamic data with higher-order functions, we'll probably need to consider variance (e.x. implicitly lifting a [Int] to a [Dynamic]. We want this to be able to be specified for an arbitrary Haskell data type to keep things extensible.

This may also be relevant for features like functor/applicative/monad polymorphism. e.x. if f : Int -> Int and x: [Int], we could say f x, and have that automatically lifted to map f x. This I think is the general idea behind what I was thinking of as "reactive polymorphism".

Fix issues with currying

Currently, currying seems to be causing issues, e.x.

f = \x y -> x
g = f 2

> g 3
3 -- (expected 2)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.