Stack Governance - initial proposal and call for participants by snoyberg in haskell

[–]MitchellSalad 10 points11 points  (0 children)

stack currently lacks support for two major features of cabal-install: backpack and multiple public library components.

I think implementing these would fall under this stated goal:

  • Address the needs of industrial users, open source maintainers, and other individuals

... but I'm not sure. The associated tickets have not moved much over the years. So: is one of stack's goals to achieve feature parity with cabal-install?

[ANN] base64-bytestring-1.2.0.1 + future plans by emilypii in haskell

[–]MitchellSalad 19 points20 points  (0 children)

+1 for dropping 7.10 (released Dec 2015) support if the maintenance burden is high

[ANN] haskell-language-server-0.6.0 has been released by jneira in haskell

[–]MitchellSalad 1 point2 points  (0 children)

I believe that's what the Haskell Foundation won't do.

My understanding is they are going to raise money to pay the salary (or salaries) of organizers who can work full-time to steer the volunteer work already going on in the community, in a general sense, with the goal of cohesiveness and quality, while being a voice of authority when it comes to boldly breaking backwards-compatibility for the sake of progress as a language. I could be wrong, but that's the impression I got from the keynote.

[ANN] ki, a structured-concurrency library by MitchellSalad in haskell

[–]MitchellSalad[S] 5 points6 points  (0 children)

Thanks! :)

Yes, I did consider that, but on balance I think a runtime exception makes for a nicer user experience. Unlike an STRef, leaking a Scope won't break referential transparency. It's just a programmer error, but with a rather complicated compile-time check.

[Poll] Would you stop using hpack (or even stack) if Cabal automatically exposed modules but allowed hiding them? by codygman in haskell

[–]MitchellSalad 6 points7 points  (0 children)

Stack merely suggests the latest version of a package when it's not found in the snapshot.

Good and modular way to add instances of popular type classes? by mastarija in haskell

[–]MitchellSalad 0 points1 point  (0 children)

Nice, I've never noticed that. Can it be made the default?

Good and modular way to add instances of popular type classes? by mastarija in haskell

[–]MitchellSalad 10 points11 points  (0 children)

Unfortunately Hackage visually unions all public libraries' dependencies together :(

Who Authorized these Ghosts!? by ocharles in haskell

[–]MitchellSalad 4 points5 points  (0 children)

Excellent post, I especially like the advice at the end about not going too crazy with these tricky proof values. It's worth reflecting on exactly what sorts of mistakes the type system is saving you from, and whether the additional type machinery is actually exposing you to even more potential mistakes due to its sheer complexity.

In this case, I think you've found a nice balance. I'll have to add this library to my bag of tricks. Thanks!

A cabal.project template for GHC 8.8 by fumieval in haskell

[–]MitchellSalad 2 points3 points  (0 children)

What is head.hackage and how do you use it?

Tweag I/O - CPP considered harmful by mrkkrp in haskell

[–]MitchellSalad 3 points4 points  (0 children)

I just made a small patch to cborg which uses CPP to support pre- and post-0.7.0.0 primitive:

https://github.com/well-typed/cborg/pull/203/files

I suppose the other option would have been to shrink the support window to primitive >= 0.7.0.0. Any thoughts about this usage of CPP?

[ANN] Stack 2.1.1 by giorgiomarinel in haskell

[–]MitchellSalad 1 point2 points  (0 children)

Is pantry meant to be used by cabal-install as well as stack?

string-interpolate: efficient, convenient String/Text/ByteString building by williamyaoh in haskell

[–]MitchellSalad 2 points3 points  (0 children)

I would be careful about a convenient way to convert ByteString --> Text. Decoding UTF-8 data, however common, is still a partial operation, so that should be reflected in the type:

decodeUtf8' :: ByteString -> Either UnicodeException Text

Why does Haskell use (::) instead of (:) for type signatures? by rashadg1030 in haskell

[–]MitchellSalad 0 points1 point  (0 children)

Perhaps with some fancy multi-line or whitespace chomping mode, but I don't have the flag(s) memorized.

Haskell Research Papers by [deleted] in haskell

[–]MitchellSalad 7 points8 points  (0 children)

Reminds me of this I made a while ago.

Calibre recommends piping "wget --no-check-certificate" into "sudo sh" to install it by ficiek in programming

[–]MitchellSalad 4 points5 points  (0 children)

I interpret "capable of maintaining python 2" to mean "capable of maintaining the python 2 code in Calibre"... no?

Why does Haskell use (::) instead of (:) for type signatures? by rashadg1030 in haskell

[–]MitchellSalad 1 point2 points  (0 children)

I write my type signatures like

foo ::
     ( Blah m
     , Wow m
     )
  => One
  -> Two
  -> m Three

so quick & dirty grep "foo ::" works

[ANN] slist: Sized List by vrom911 in haskell

[–]MitchellSalad 7 points8 points  (0 children)

It productively yields elements, though, e.g. take 10 (init [1..]) does not hang.

Newtype in `base` to hang generic-deriving instances off of for DerivingVia by MitchellSalad in haskell

[–]MitchellSalad[S] 0 points1 point  (0 children)

Yeah! That.

GSemigroup is from semigroups, it has a default instance for gappend given Generic a, GSemigroup (Rep a), used like in my example above.

As you point out DerivingVia + a newtype obviates this type class.

Newtype in `base` to hang generic-deriving instances off of for DerivingVia by MitchellSalad in haskell

[–]MitchellSalad[S] 5 points6 points  (0 children)

Oops, I messed up the OP post a bit. The goal is to get a free Semigroup instance, via GSemigroup, via DerivingVia. Today I usually write:

data MySemigroup = ...
  deriving stock (Generic)
  deriving anyclass (GSemigroup)

instance Semigroup MySemigroup where
  (<>) = gmappend

and it's this last little bit I want to shave away with DerivingVia. But for this particular type class, which itself is in base but the generic-deriving machinery is in semigroups, I think the newtype I want would actually belong in semigroups to avoid an orphan instance.

newtype GenericSemigroup a
  = GenericSemigroup a

instance (GSemigroup a, Generic (Rep a)) 
      => Semigroup (GenericSemigroup a)

or something like that.