21 karma · joined November 18, 2014
It's also not clear to me that it is ethical to have a punishment be far more extreme than a crime. Sending someone to jail for 40 days for stealing $2.75 seems a little extreme. That could easily turn a poor person with a job into a homeless person with no job.
A fine feels more appropriate. Maybe free rides for those who legitimately can't afford the fare.
* https://en.wikipedia.org/wiki/Broken_windows_theory#New_York... * https://cityroom.blogs.nytimes.com/2007/08/13/why-did-crime-...
Is Hack on Windows something that you'd use? Or are you asking out of curiosity?
Without namespacing, you might be using mutually recursive type definitions like
type statement = ExpressionStatement of expression
and expression = FunctionExpression of statement list
to do this with modules you need to use recursive modules, like module rec Statement : sig
type t = Expression of Expression.t
end = struct
type t = Expression of Expression.t
end
and Expression : sig
type t = Function of Statement.t list
end = struct
type t = Function of Statement.t list
end
One of the sucky things about recursive modules is that you cannot omit the signatures, however if your modules only include types then there is a shortcut that looks like module rec Statement : sig
type t = Expression of Expression.t
end = Statement
and Expression : sig
type t = Function of Statement.t list
end = Expression
Links:
Big real world example:
https://github.com/facebook/flow/blob/3a5b4040b7d2a648f97a06...Recursive module docs: http://caml.inria.fr/pub/docs/manual-ocaml-400/manual021.htm...