This an experimental playground for a general purpose functional language. This is the implementation of a web application that allows to write and execute Qiqe code in the browser.
This is a mutated word from the spanish word "Quique", which is an animal that lives in the south of Chile. It's a little mammal that lives in the ground.
The application consists of a code editor, an interpreter service, and a web server. The system uses nginx as a reverse proxy to route requests between the React frontend and the Haskell interpreter service. The interpreter service provides a JSON REST API that compiles and executes Qiqe code. The code editor is a React application that allows users to write Qiqe code and execute it in the browser.
For detailed system architecture information, see ARCHITECTURE.md.
You can find the language documentation here.
More examples can be found in the examples directory.
For development, you need to have Docker and Docker Compose installed. Then, you can run the following command to start the development server:
./scripts/start-dev.shThis will start the complete development environment including:
- nginx reverse proxy on port 80
- React frontend with hot reloading
- Haskell interpreter service with JSON REST API
- PostgreSQL database
The React frontend will automatically reload when you change the code. To rebuild other services, stop the containers and run the start script again.
If you encounter WebSocket connection issues (especially in Firefox), see the WebSocket Troubleshooting Guide for detailed solutions and setup instructions.
For production deployment, use the production Docker Compose configuration:
./scripts/start-prod.shThis will start the production environment with:
- nginx reverse proxy on port 80
- Optimized React frontend build
- Haskell interpreter service
- PostgreSQL database with production configuration
The production setup includes proper logging, health checks, and optimized configurations for better performance.
The idea of this project is experiment with a general purpose functional language. And in the future, allow to use visual programming.
If you want to contribute, you can open an issue or a pull request. You can also contact me at Twitter.
