Func Prog Sweden is the channel for anyone interested in functional programming. The channel explore different functional programming languages like Erlang, Haskell, F#, Scala, Clojure and functional programming in general. Subscribe to the channel to learn more and to support our work of spreading functional programming.
If you want to get featured on the channel and have something to present, contact the organizers by joining the FPS Discord Server and chat with Magnus or Robin
If you want to spread functional programming and support the channel, buy something from the shop: funcprogsweden.myspreadshop.net/
I'm only 13:00 in, but, I think I'm having a hard time understanding what this is... is it just another functional language (a la haskell)? And what do you mean by "It has no syntax", 😅 I feel like everything i've seen was "syntax" . In any case, I am quite intrigued...
I think a better statement than "no syntax" is to probably say "no parser". The program is saved as a JSON representation of the AST and not a source text file.
@@petersaxton5183 ahhhh! I see... that makes more sense to me (and it aligns with what we're seeing). I actually think thats quite interesting.... kinda like a batteries not included lsp starter. I dig it... I think the EYG team (probably just this guy? 🤔) need to do better messaging for their product though. Without the demo, I dont know if I'd even explore this project tbf.
Is there a reason for instane / unredable syntax for function call? Also I don't like no 'return' keyword or something indicating where function returns something. I think it adds to readability. Other than that I love it.
@@Qrzychu92 Well I'm pretty sure you can get used to every minor change like this and then the other way around seems just wrong. We could have no keyword for function definition and I'm sure after some time youd see writing 'def' or whatever wrong. The point is what you choose to see and I think highlighted 'return' keyword greatly increases readability. the same goes for function call. I'm sure you can get used to it, but what's here it's plain insane not to do this like the whole rest of the world.
Oh, thanks! Maybe, you'll be interested in my talk "Functional Programming: Failed Successfully" then. It demystifies a lot. I wish my speech to be improved. Not only Engilish, but also my native Russian. I'm more writer than speaker, yes...
you don't have mutable data, data is always immutable, what is mutable is the memory, the storage where we put that data in. Variables & pointers are an abstraction on memory, for direct & indirect access respectively, and what functional programming is about is to make our code dependent on values and not on memory locations, traditionally the FP community call this, referential transparency, but the clever guys for the imperative world have given it a better name, value semantics.
ok, tell me you don't understand types without telling me you don't understand types. *types don't fix the understanding of anything.* *types are markets, tags that track code where certain assumptions about the code where made* so when you need to make changes you can follow the types and change all the places where you have changed your assumptions and understanding.
I have to admit, I love ML syntax, it looks so much cleaner to me than other languages, some people prefer the English looking stuff but for programming languages English looking stuff is sub-optimal for my taste. I still prefer S-expressions syntax. people don't understand how to code with Dynamic languages. the main mistake they make is to focus only on types, also if your reference as dynamic language is Python or Ruby then you are lost. Your reference should by Common Lisp & Smalltalk & Erlang, those are the real dynamic languages, Ruby & Python follow the same static philosophy of UNIX, even som lisps like Scheme & Emacs lisp & some smalltalks like GNU Smalltalk follow the static nature. Common Lisp & Squeak Smalltalk are the standard for Dynamic languages.
@@WiecejNoxiego sure, that's the best way indeed. Imagine web servers written in ROC, both front and back ends, running on BEAM, type safe, no runtime errors etc etc.
@@СергейГалиуллин-п9ю I didn't explore ROC much yet (still waiting for it to mature a bit), but personally I'd be more interested in if it's possible to create platform for creating web servers with OpenAPI out of the box. It'll definitely be interesting to see how much features platforms can abstract from applications. Beam is nice, but it's probably overkill for most web servers and you probably take big performance hit for all its' features.
Oh, wow. A couple months ago I was thinking about how it would be possible to write extensible software without compromising on security, the idea of platforms is super interesting, and could be this languages killer feature
@19:00: The type system can actually help you: type AddIns = "a" | "b" | "c" | "d"; type SelectedAddIns = { [key in AddIns]?: number; }; const coffeeForMe: { selectedAddIns: SelectedAddIns } = { selectedAddIns: { a: 1, x: 5, // <-- This is not covered by the type definition. Keys must be one of AddIns }, };
It's always the jump from the free monad to actually extensible effects that trips me. It's reasonable how you can handle a single effect by encoding it as a value and threading it, but the moment you introduce multiple effects things get quite complicated, specially the part where you track at the type level which effects have already been handled. Unfortunately this presentation did not get to that part 😞
The genius of that data structure. It's part of the niceness of JSON or dot files. Must've been tortuous for Microsoft engineers to stitch together COM, let alone the varying NET Frameworks (and their respective convoluted graphical kits)
1:07:00 The Pseudoinverse of a matrix is also defined for non-square matrix, that's why it is the Pseudoinverse and not the plain matrix inverse. Hmatrix.pinv supports that (like Numeric.LAPACK.Singular.pseudoInverseRCond).
People have been using multiple languages since forever. Linker scripts, make files, autoconf, the list goes on. Also, how is this related to functional programming? It looks might it might be related to dataflow programming, but i don't see higher order functions
If you read the Turing Award lecture by John Backus who invented functional programming, he talks about software interchangeable parts, and making large programs out of smaller pieces. So this is an attempt to offer a more Lego-like experience for coding, where you snap together small chunks of code. You are correct it doesn't resemble languages like Haskell. Higher order function capability is expressed rather differently, but it has the same result. Hard to explain in a paragraph.
I love the mortgage calculator as an example of a responsive layout because when flipping the screen the layout itself doesn't change at all, everything just gets wider by a seemingly completely arbitrary amount so that nothing lines up anymore. I also love the color picker. It's very responsive until the available vertical space gets too small and it hits a debugger break point and freezes the application. Very production ready. It also really doesn't want to starts scrolling, it just shrinks and/or hides content.
I updated the Color picker to accommodate super low vertical space, by dropping the web palette if the total screen height is below a certain threshold. It is intended for desktop computer use and tries to make the color swatches large enough to be useful
@@zcizzorhandz5567 maybe you do but most of the people i know make things because they want to. why make music, or a new game, or a sand castle. utility is an incentive, it's not the reason.
Really not a fan of the idea of "try->throw->catch-> try again inside the function that threw" idea near the end, that sounds like itd be extremely hard to reason through. Maybe resumes that affect the control flow of the thrower should explicitly be passed in as an argument and if they dont apply they go back up as normal and if they do they try the passed in thing
Would it be possible to use Roc as a scripting language in a game? Writing a custom platform to provide all interactions with the game. And have it safely run on players pc?
I would think so - it can compile to webassembly so there's at least an intention for the output artifact to be variable (and based on the platform?). Or do you mean people would write Roc _in_ the game? The REPL on their website means they've managed to embed the language and runtime, so you could too (not that it would be easy, haha).
It will be interesting to see the governance model for this language. I have used Elm in the past. Richard was also part of the Elm team. Elm is “public source” and not open source. You can not meaningfully contribute to the language if you are not part of the team. It is also the only language I know where FFI can only be used by packages that the language authors write. I will not use any language that has not reached 1.0 yet if I’m not comfortable that I can fix the bugs in the language that I run into.
Roc is very much true open source. The largest contributor isn’t even Richard anymore, and there are loads of people that have made very meaningful contributions.
it's unusual to follow along with a video where the person live coding is using 1 release ahead of what the github pushes for every package lol I guess this video will stay relevant for longer that way though
Richard Feldman is such an engaging and captivating presenter. He comes across as congenial and curious and it's always a pleasure to watch his talks. Really rooting for roc and I can see it's getting to a point where I could start using it myself!
Different platforms could have completely different APIs, or different implementations of the same APIs. Or they can have their own constraints on the Main that you're supposed to export (e.g. list of errors allowed on the top level, which the platform will then process).