damncabbage
I agree, though, that compared to Haskell and Rust it doesn't give you much. Dialyzer is (intentionally) a fail-open checker that doesn't allow expressing generics; I've had a rough time getting it to tell me my code is wrong. Credo is (intentionally) just a style linter. "Just let it crash" isn't useful when you're talking about code that is going to break because of its structural incoherence (a class of errors type-checker are good at catching), and not because of transient errors in external dependencies.
> I mean this sincerely — are you _sure_ you didn't get me confused with someone else? I was definitely a dick from what I can see from the Twitter history and I apologize. However, I cannot remember and cannot find myself ever saying or implying something as horrendous as what you're describing here.
https://twitter.com/bitemyapp/status/477359528510382080
[@bitemyapp] @KirinDave my first workflow video is up to
1,535 views on Youtube so far. Who knows how many people
have used my guide. I'm feeling good.
[@KirinDave] @bitemyapp It is not about your traffic, it is
about their excitement. Get over yourself.
[@bitemyapp] @KirinDave Drinking the haterade tonight. Some
of those pregger hormones transfer over?
Should ramp up theft of Clojure library authors >:)
[@KirinDave] @bitemyapp Yeah I'm hysterical that's real cool.
That covers a portion of the claim. (I'm trying to stay out of actually passing judgement on bitemyapp or his ">"-quoted defence or KirinDave's earlier claim.) function somefunction(somestring/*: string*/)/*: boolean */ {
var ret/*: boolean */;
...
return ret;
}
(See https://flowtype.org/blog/2015/02/20/Flow-Comments.html)I'm kind of curious what you've run into personally. Having a dependency without any type-defs get silently treated as `any` is my own beef, but I haven't hit much else yet.
(Some type-defs' use for `any` also gets my goat, such as Promise's catch argument and some of the lodash functions, but I'm considering that a separate thing.)
> And honestly, some of the decisions around the language just feel strange. Not knowing what kind of bool to use [0] is pretty emblematic of where it is going as a language.
This is more an existing JS weirdness (`true`/`false` vs `Boolean()`); Flow doesn't mess with runtime semantics, only adding a layer that you check with then strip out.
And TypeScript has the same thing:
var a: boolean = new Boolean(1);
// Produces:
// NewTypering.ts(29,5): error TS2322: Type 'Boolean' is not assignable to type 'boolean'.Haskell does this by representing IO actions as values, eg. "IO String" (something like "IO<String>", for people more familiar with that syntax), representing an IO action that, when later evaluated, will yield a string that you can use in subsequent actions.
Haskell's "main" (entry-point) function is a value of type "IO ()" (IO of a value representing nothing useful; you don't get anything out of it, so you just have a nothing placeholder). When a Haskell program is run, it ostensibly (hand-waving here) takes that IO value and interprets it, performing the action IO.
You have functions like putStrLn (print a line) that takes a String, and returns an "IO ()" . Accordingly, if you have
main = putStrLn "Hello, World!"
... you have a value that lines up with the expected return value of main "IO ()". More complicated examples, like main =
readLn >>= (\x -> putStrLn ("Hello, " ++ x))
... are doing the same thing (checking the types line up), just with more moving parts (the Monad thing you mentioned, which we're using to relate the "read line" function with the "print line" function).The key bit is that it's just "IO Blah" values standing in for IO actions, and like jigsaw pieces, these IO-returning functions only fit together where the types line up, restricting how you can use them.
Monads are tangential to this; the type-checking of that jigsaw puzzle is what matters here.
(Say you have 15 items in an array. For whatever reason, such as you not being in control of the expected input structure of whatever you're giving this JSON to, you have them grouped with comments at the top of each block.)
As someone who's standing on the precipice of GHCJS, Haste and PureScript, I'm very curious to hear about your Haste experiences in this regard.
(I've been using PureScript in my side-projects for a bit. For the sake of completeness of this list, I've tried Elm and am not interested.)
(It's also a bit wobbly, which isn't great, but probably expected.)
Can be in-memory state. Everything beyond toy-sized I've ever worked on has externalised this sort of state to a database of some kind, if only so you can run a second copy for the sake of failover. I don't believe your example is relevant.
https://www.ruby-lang.org/en/news/2014/01/10/ruby-1-9-3-will...
https://www.ruby-lang.org/en/news/2015/02/23/support-for-rub...
https://docs.google.com/document/d/1soIYek-YEIvqtu9brv3ecdPb...
This page goes into a bit more detail: https://andreashead.wikispaces.com/How+Do+Blind+People+Use+a...
$('body').append('<style>.lesson,.post{visibility:visible;}</style>');
(I enjoyed reading the content, but found it infuriating to skim.)As an Australian, I fear this is yet another one of those things we won't be able to use on our spotty 250KB/s connections.
I recommend having a read of this other discussion thread further up the page: https://news.ycombinator.com/item?id=8312701
Getting Git Right
It's not full-record-serialization, and it can't bring back deleted records for you.
(See https://github.com/rails/rails/tree/master/activejob#globali... for an example.)
I'm of the opinion that languages around the 10 year mark
(which PHP is obviously well past) really ought to focus on
becoming the best X they can be, rather than chasing the
tail lights of constantly-moving best practice.
Would that include not adding: * Anonymous functions and closures
* Namespaces
* Late static binding
* Dynamic dispatching to static methods
* Rackup/SimpleHTTPServer-like web server
* "finally" in exception-handling
* Being able to call foo()[0] instead of the clumsy
assign-then-dereference two-step.
What does "the best PHP it can be" mean? Anonymous functions (for example) are arguably way outside the style of the PHP from ten years ago, but they're tremendously useful.(I used to use PHP. I dislike it as a language, but I have nothing against them continuing to improve it like they have over the last nine years.)
PS: PHP already supports threading via a PECL module. http://php.net/manual/en/class.thread.php
http://c2.com/cgi/wiki?SingletonGlobalProblems
http://c2.com/cgi/wiki?SingletonsAreEvil
(And also: http://blogs.msdn.com/b/scottdensmore/archive/2004/05/25/140... )
newtype ID a = ID Int deriving (Eq,Ord,Show)
Should possibly just be: newtype ID a = ID a deriving (Eq,Ord,Show)https://sourceware.org/bugzilla/show_bug.cgi?id=4403