If you had a magic wand and could suddenly change haskell, what would you change? For example, one thing that comes to mind is replacing String with Text
Be able to address off-heap memory... along with modernizing the Prelude. It'd be nice to have common data structures, text, no partial functions, etc.
I like being able to experiment with a bit of code quickly without having to setup a package and dependencies just to get basic facilities like a hashmap or bytestrings
fix up template haskell, though I can't say exactly whats wrong with it, I don't have much experience with it
TH interface is a "split personality":
it let's you construct AST by using normal constructors with applicative style, but at the same time it has these lowercase functions that wrap around Q automatically - that sounds convenient at first, but doesn't "fit" your requirements all the time
It provides 3 modules which import mostly the same things (Language.Haskell.TH, Language.Haskell.TH.Lib, Language.Haskell.TH.Syntax) and you never know which ones to import to get those you want
It's Q monad is a, well, Monad, but it still exports bunch of monomorphized versions of Monad combinators with Q suffix
And then it doesn't let you do "pure" metaprogramming without IO, which greatly limits guarantees about interface that's mostly used to generate some piece of code from simple arguments and current scope
add real dependent types (ala idris/agda) - the current state with sings makes it look very frightening to newcomers (and it's also rather boilerplate and syntax heavy)
ability to share instances for things like data Tup a b c = Tup a b c and (a, b, c) without resorting to Generics (aka some kind of structural typing?)
better support for custom type errors - most libraries trying to provide type errors have various problems with this
add some way to support different representation in the type system vs at runtime - I want to be able to use data Nat = Z | S Nat while typechecking, but have all their operations compiled to much more efficient Integer ones (inspired by agda somewhat)
add Foldable1 (/NonEmptyFoldable or whatever name..) in base
make typeclasses "more first-class" - maybe have something like what implicit arguments are in agda, very often I would like to use ApplyingVia-like things
turn on a lot more warnings by default to help out newcomers
reduce compile times by a factor of 22 -- 2 is nowhere near enough ;)
fix the various warts and corner cases of existing language extensions (e.g. the intersection of -XQuantifiedConstraints and -XTypeFamilies comes to mind, or the various proposals for a much better -XApplicativeDo)
figure out a better way to avoid baking Bool into if than -XRebindableSyntax and similar DSL-related concerns
many fixes to the prelude / base
support perf profiling in a useful way
impredicativity would have been on here, except SPJ already nailed it
If you had a magic wand and could suddenly change haskell, what would you change? For example, one thing that comes to mind is replacing String with Text
100% steal the whole of purescript's records implementation and throw haskell's in the dumpster.
Replace stack and Nix with one based on Haskell (hnix) and integrate it tightly to HLS for one awesome dev experience.
Ecosystem answer.
i'd love to get rid of all the partial functions in base/
basically modernize the prelude
fix up template haskell, though I can't say exactly whats wrong with it, I don't have much experience with it
i'd really love for GHCJS to be faster etc
Bring down compile times by a factor of 2.
it would be great if the optimizer was better understood
so make it more predicatble?
it may be perfectly predictable today idk
Be able to address off-heap memory... along with modernizing the Prelude. It'd be nice to have common data structures, text, no partial functions, etc.
I like being able to experiment with a bit of code quickly without having to setup a package and dependencies just to get basic facilities like a hashmap or bytestrings
yep
i'd like to give it a dependent type system so its easier to learn the type level programming stuff in haskell
TH interface is a "split personality":
Q
automatically - that sounds convenient at first, but doesn't "fit" your requirements all the timeLanguage.Haskell.TH
,Language.Haskell.TH.Lib
,Language.Haskell.TH.Syntax
) and you never know which ones to import to get those you wantQ
monad is a, well,Monad
, but it still exports bunch of monomorphized versions ofMonad
combinators withQ
suffixAnd then it doesn't let you do "pure" metaprogramming without
IO
, which greatly limits guarantees about interface that's mostly used to generate some piece of code from simple arguments and current scopedata Tup a b c = Tup a b c
and(a, b, c)
without resorting toGenerics
(aka some kind of structural typing?)data Nat = Z | S Nat
while typechecking, but have all their operations compiled to much more efficientInteger
ones (inspired by agda somewhat)Foldable1
(/NonEmptyFoldable
or whatever name..) inbase
ApplyingVia
-like things-XQuantifiedConstraints
and-XTypeFamilies
comes to mind, or the various proposals for a much better-XApplicativeDo
)Bool
intoif
than-XRebindableSyntax
and similar DSL-related concernsbase
Matt Peddie said:
ooh, nice
Location information to all io related errors