<div dir="ltr"><span style="font-size:12.8px">Hi everyone, (this is somewhat cross-posted from reddit)</span><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">I'm announcing Blocks for CodeWorld, which is a functional based drag-and-drop programming environment.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">The project is part of Haskell Summer of Code. The aim of the project is to create a web application with which users can drag-and-drop blocks in order to create <a href="https://code.world/" target="_blank">CodeWorld</a> applications,</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">The project is primarily educational based, and more advanced applications may be created with the regular CodeWorld text UI.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">The application uses Blockly to allow users to drag-and-drop blocks, which can then be snapped together in order to build programs, in a Scratch-esque manner. </div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">The generated code is Haskell, which is then sent to the regular CodeWorld server and compiled with GHCJS, the resulting JavaScript is then run on the site. </div><div style="font-size:12.8px">Code is generated as students are introduced to programming concepts with the Blocks and will later be exposed to a more text based environment.<br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">The majority of the code, aside from Blockly, is in Haskell, which is compiled to JavaScript using GHCJS.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Currently, in this initial release, the user is able to:</div><div style="font-size:12.8px"><ul><li style="margin-left:15px">Build and run simple CodeWorld programs, mostly pictures and transformations thereof</li><li style="margin-left:15px">Save and Load projects, load a program by its URL.</li><li style="margin-left:15px">Use polymorphic blocks, such as an if-then-else block and some others</li><li style="margin-left:15px">Use Let definition blocks to create top level bindings</li></ul><div>Later, more advanced functional features such as pattern matching and some support for first-class functions might be covered.</div><div><br></div><div>For anyone interested, an initial version can be found at <a href="https://code.world/blocks" target="_blank">code.world/blocks</a>. If you want to follow on the progress you can check out <a href="http://stefanj.me/funblocks/" target="_blank">my blog</a>. </div></div></div>