6 ms·
Purescript-native can now target Golang
- haolez 7y agoWhen the author mentions that Go’s build system is useful in this scenario, what does he mean? Can Purescript compile to Go with “go build”? Doesn’t make sense to me. I’ll be sure to give this a try!
- weberc2 7y agoPresumably it means that Purescript compiles to Go which can then be built with "go build" instead of compiling to C++ and leaving it to the user to figure out how to compile it with their other C++ sources.
- didibus 7y agoWow, hadn't kept up with purescript at all. It can now compile to JS, Go and C++11 and supports full interop in all 3 cases! That's pretty damn cool. How's the language itself? I had heard it was a Haskell clone, is that still mostly true? If not, where does it differ and differentiate itself?
- tmountain 7y agoIt compiles to Erlang too. The language itself is extremely similar to Haskell but with some refinements around some of the legacy baggage Haskell suffers from (string handling for example). Some differentiators include: strict evaluation by default, handling of record types, an extremely modular package policy (nothing is imported by default), and a lack of some things that can potentially make Haskell esoteric at times (template Haskell for example). The community is small but dedicated. Documentation can be very minimal in a lot of cases, so it’s not a beginner friendly language, but once you are up and running, it’s a pretty awesome experience overall.
- eklavya 7y agoAlso the dev tooling isn't an afterthought and the IDE experience is top notch. (This isn't very different from Haskell nowadays with HIE).
- dmix 7y agoIn my experience attempting to learn it you have to be pretty familiar with Haskell since as you mention a lot of stuff isn't well documented outside of types and small blurbs. It's been a year since I tried and I'm sure a ton has changed since then but I don't expect this to be different for a while. Which isn't necessarily a bad thing, as all new languages have this problem and learning Haskell is very valuable experience for any programmer - just not an easy one. Basically PureScript isn't something you can jump into like Elm or Typescript or w/e, while being an experienced programmer who knows JS or non-Haskell-y languages, but it's future is very bright if it gets mainstream adoption IMO and I'm following it closely.
- deleted 7y ago[deleted]
- gilmi 7y agoAnd don't forget first class records with row polymorphism! Interested readers might want to Try PureScript[0] for a quick demonstration. [0]: http://try.purescript.org http://try.purescript.org
- didibus 7y agoHum, that sounds pretty neat actually. How does it manage purity without lazyness?
- rattray 7y agoPureScript always seemed like a saner, more practical Haskell to me. Is that the case? How useful is it in real world applications these days? I've never really played around with it.
- babyloneleven 7y agoIn some sense it's the contrary.. the typeclass hierarchy has a lot of idealism that won't fly in Haskell's comparatively pragmatic Prelude (DivisionRing? Really?) They even backtracked their version of IO, that used row types to track effects - because it just wasn't worth it.
- dmix 7y agoCan you explain what you mean by "DivisionRing? Really?"? I see this doc regarding the Eff rows IO change, which must have happened after I last used Purescript https://purescript-resources.readthedocs.io/en/latest/eff-to-effect.html https://purescript-resources.readthedocs.io/en/latest/eff-to... For me personally using something heavyweight and bolted-on like GHCJS for Purescript's typical JS-replacement use-case's seems to be a far worse option. Even if Haskell is more mature and refined as a language. Particularly the real world production examples of GHCJS-backed apps I've seen people post on /r/haskell have all been bloated, slow, non-web standard, and obviously designed by backend programmers not designers/web developers... so I may be biased. Although that stuff has as much to do with community as it does technology.
- runeks 7y ago> Can you explain what you mean by "DivisionRing? Really?"? My guess is that OP is saying that PureScript’s DivisionRing compared to Haskell’s Fractional is neither practical nor pragmatic. > For me personally using something heavyweight and bolted-on like GHCJS […] In my experience the majority of Haskellers agree that GHCJS is not the way to go wrt. web apps. But I’m not convinced that inventing a new language that’s almost identical to Haskell is the right solution.
- 7y ago
- maxekman 7y agoFound some instructions for how to use the Golang backend: https://github.com/andyarvanitis/purescript-native/blob/golang/README-go.md https://github.com/andyarvanitis/purescript-native/blob/gola...
- truth_seeker 7y agoGood but I wouldn't give it a try unless I see working code repo which has working REST server along with basic SQL database driver integration. Test suite integration and project build tips would be nice.
- pjmlp 7y agoSurprised that Purescript is still a thing, it appears to have died out from all conferences that focus on new tech like StrangeLoop and similar.
- runeks 7y agoCan someone explain the advantage of using Go as an intermediate language? Since there's no way to translate Go back to PureScript, I assume the intention isn't to write an application in PureScript, compile it to Go, and edit the resulting Go code. So is this just a way to utilize the Go compiler to produce binaries from PureScript, or am I missing other use cases?
- pka 7y agoTangential, but some very cool things are happening in Purescript-land, especially when it comes to row types or UI research: * https://github.com/natefaubion/purescript-variant https://github.com/natefaubion/purescript-variant (open variant types) * https://github.com/natefaubion/purescript-run https://github.com/natefaubion/purescript-run (extensible effects implementation based on purescript-variant) * https://github.com/ajnsit/purescript-concur https://github.com/ajnsit/purescript-concur (time-reifying UI framework, there's also a Haskell and a JS implementation of Concur) * https://github.com/arthurxavierx/purescript-comonad-ui-todos https://github.com/arthurxavierx/purescript-comonad-ui-todos (comonadic UIs) * https://github.com/paf31/purescript-purview https://github.com/paf31/purescript-purview (incremental lambda calculus UI library, this is mind blowing!) * https://github.com/paf31/purescript-sdom https://github.com/paf31/purescript-sdom (declarative diff-less UI library) There's also [0], a mature UI framework used in production at Slamdata. Lumi [1] are writing their frontend in Purescript. What I especially like about Purescript is that the community is open to experimentation, while at the same time not being afraid to backtrack when things turn out to be a bad idea, like the row tagged Eff monad. The recent addition of QualifiedDo is a good example of this, which allows you to rebind >>= in the following manner: test :: forall m a. I.IxMonad m => m a a String test = I.do a <- I.pure "test" b <- I.pure "test" I.pure (a <> b) Imo, there simply is no better way for a Haskeller to target JS at the moment. [0] https://github.com/slamdata/purescript-halogen https://github.com/slamdata/purescript-halogen [1] https://www.lumi.com https://www.lumi.com
- casmclas 7y agoI've tried several times to use Purescript to target web browsers. I got frustrated by Bower - it's especially hard to start a new project using tools that say "don't use me, I'm deprecated". There was a huge amount of fairly sloppy javascript boundary code. And - it turns out - I like laziness.I dunno, I wish I could run ghc code efficiently in a web browser. But even though I can't, I much prefer to run ghc code inefficiently in a web browser than run a language intended to facilitate binding to javascript's sloppy semantics. When I tried using ps-concur or some other ps gui libraries, I didn't feel inclined to keep progressing. When I learnt reflex with ghcjs, I built stuff, and I kept finding new things I wanted to build. The best way for a Haskell to target browsers at the moment is via ghcjs. Hopefully one day it'll be with a ghc-to-wasm compiler.
- bsaul 7y agoAre there any websites indexing "underground" languages to indicate their current adoption status ? From "only the language developers and their friends are working with it, for experimental projects", to "some fancy startups are using it with good results thanks to its cool new features" ? I don't mean it as a way to depreciate the work people put onto those projects, but it would certainly help with understanding what one's expectations should be. If i take OP example : adding a new target to a language that's already heavily used in some startups in production doesn't mean the same thing than if the language is just used for toy projects and experiment. We all know how hard it is to reach production-grade quality (for pretty much anything), and how many good ideas simply collapse on the face of overlooked details from the real world.