diff --git a/.gitignore b/.gitignore index 20e090a3..80e9047f 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ /.psc* /.purs* /.psa* +/.stack* diff --git a/bower.json b/bower.json index 185876c7..2ffb3cd6 100644 --- a/bower.json +++ b/bower.json @@ -7,68 +7,61 @@ "output" ], "dependencies": { - "purescript-console": "^3.0.0", - "purescript-foreign-generic": "^5.0.0", - "purescript-jquery": "^4.2.1", - "purescript-js-timers": "^3.0.0", - "purescript-parallel": "^3.2.0", - "purescript-prelude": "^3.1.0", - "purescript-random": "^3.0.0" + "purescript-console": "^4.1.0", + "purescript-foreign-generic": "^7.0.0", + "purescript-jquery": "^5.0.0", + "purescript-js-timers": "^4.0.1", + "purescript-parallel": "^4.0.0", + "purescript-prelude": "^4.1.0", + "purescript-random": "^4.0.0", + "purescript-web-html": "^1.2.0" }, "devDependencies": { "ace": "^1.2.8", "jquery": "^3.2.1", "underscore": "^1.8.3", - "react": "^15.6.1", + "react": "^16.1.0", "mathbox": "^0.0.5", - "purescript-thermite": "^4.1.1", - "purescript-behaviors": "^5.2.0", - "purescript-slides": "^0.5.0", - "purescript-flare": "^3.2.0", - "purescript-arrays": "^4.1.2", - "purescript-bifunctors": "^3.0.0", - "purescript-console": "^3.0.0", - "purescript-const": "^3.0.0", - "purescript-contravariant": "^3.1.0", - "purescript-control": "^3.3.0", - "purescript-distributive": "^3.0.0", - "purescript-eff": "^3.1.0", - "purescript-either": "^3.1.0", - "purescript-enums": "^3.2.1", - "purescript-exceptions": "^3.1.0", - "purescript-exists": "^3.0.0", - "purescript-foldable-traversable": "^3.6.0", - "purescript-foreign": "^4.0.1", - "purescript-free": "^4.1.0", - "purescript-functions": "^3.0.0", - "purescript-functors": "^2.2.0", - "purescript-generics": "^4.0.0", - "purescript-generics-rep": "^5.2.0", - "purescript-globals": "^3.0.0", - "purescript-graphs": "^3.0.0", - "purescript-identity": "^3.1.0", - "purescript-inject": "^4.0.0", - "purescript-integers": "^3.1.0", - "purescript-lazy": "^3.0.0", - "purescript-maps": "^3.5.2", + "purescript-arrays": "^5.1.0", + "purescript-bifunctors": "^4.0.0", + "purescript-console": "^4.1.0", + "purescript-const": "^4.1.0", + "purescript-contravariant": "^4.0.0", + "purescript-control": "^4.1.0", + "purescript-distributive": "^4.0.0", + "purescript-effect": "^2.0.0", + "purescript-either": "^4.1.0", + "purescript-enums": "^4.0.0", + "purescript-exceptions": "^4.0.0", + "purescript-exists": "^4.0.0", + "purescript-foldable-traversable": "^4.1.0", + "purescript-foreign": "^5.0.0", + "purescript-foreign-object": "^1.0.0", + "purescript-free": "^5.1.0", + "purescript-functions": "^4.0.0", + "purescript-functors": "^3.1.0", + "purescript-generics-rep": "^6.1.0", + "purescript-globals": "^4.0.0", + "purescript-identity": "^4.1.0", + "purescript-integers": "^4.0.0", + "purescript-lazy": "^4.0.0", "purescript-math": "^2.1.0", - "purescript-maybe": "^3.0.0", - "purescript-monoid": "^3.1.0", - "purescript-prelude": "^3.1.0", - "purescript-profunctor": "^3.2.0", - "purescript-proxy": "^2.1.0", - "purescript-quickcheck": "^4.4.0", - "purescript-random": "^3.0.0", - "purescript-refs": "^3.0.0", - "purescript-semirings": "^4.0.0", - "purescript-sets": "^3.0.0", - "purescript-st": "^3.0.0", - "purescript-strings": "^3.3.1", - "purescript-tailrec": "^3.3.0", - "purescript-transformers": "^3.4.0", - "purescript-tuples": "^4.1.0", - "purescript-typelevel-prelude": "^2.4.0", - "purescript-unfoldable": "^3.0.0", - "purescript-validation": "^3.1.0" + "purescript-maybe": "^4.0.0", + "purescript-ordered-collections": "^1.0.0", + "purescript-prelude": "^4.1.0", + "purescript-profunctor": "^4.0.0", + "purescript-proxy": "^3.0.0", + "purescript-quickcheck": "^5.0.0", + "purescript-random": "^4.0.0", + "purescript-refs": "^4.1.0", + "purescript-semirings": "^5.0.0", + "purescript-st": "^4.0.0", + "purescript-strings": "^4.0.0", + "purescript-tailrec": "^4.0.0", + "purescript-transformers": "^4.1.0", + "purescript-tuples": "^5.1.0", + "purescript-typelevel-prelude": "^3.0.0", + "purescript-unfoldable": "^4.0.0", + "purescript-validation": "^4.0.0" } } diff --git a/index.html b/index.html index 603810bf..8e97044d 100644 --- a/index.html +++ b/index.html @@ -54,6 +54,7 @@ +
")();
- var v2 = Control_Monad_Eff_JQuery.create("")();
- Control_Monad_Eff_JQuery.append(v2)(v1)();
- Control_Monad_Eff_JQuery.setText(s)(v2)();
- return Control_Monad_Eff_JQuery.append(v1)(v)();
+ var v = JQuery.select("#column2")();
+ JQuery_Extras.empty(v)();
+ var v1 = JQuery.create("")();
+ var v2 = JQuery.create("")();
+ JQuery.append(v2)(v1)();
+ JQuery.setText(s)(v2)();
+ return JQuery.append(v1)(v)();
};
};
- var displayLoadingMessage = Control_Bind.bind(Control_Monad_Eff.bindEff)(Control_Monad_Eff_JQuery.select("#loading"))(Control_Monad_Eff_JQuery_Extras.fadeIn);
+ var displayLoadingMessage = Control_Bind.bind(Effect.bindEffect)(JQuery.select("#loading"))(JQuery_Extras.fadeIn);
var displayErrors = function (errs) {
return function __do() {
- var v = Control_Monad_Eff_JQuery.select("#column2")();
- Control_Monad_Eff_JQuery_Extras.empty(v)();
- return Data_FoldableWithIndex.forWithIndex_(Control_Monad_Eff.applicativeEff)(Data_FoldableWithIndex.foldableWithIndexArray)(errs)(function (i) {
+ var v = JQuery.select("#column2")();
+ JQuery_Extras.empty(v)();
+ return Data_FoldableWithIndex.forWithIndex_(Effect.applicativeEffect)(Data_FoldableWithIndex.foldableWithIndexArray)(errs)(function (i) {
return function (v1) {
return function __do() {
- var v2 = Control_Monad_Eff_JQuery.create("")();
- Control_Monad_Eff_JQuery.addClass("error-banner")(v2)();
- Control_Monad_Eff_JQuery.setText("Error " + (Data_Show.show(Data_Show.showInt)(i + 1 | 0) + (" of " + Data_Show.show(Data_Show.showInt)(Data_Array.length(errs)))))(v2)();
- var v3 = Control_Monad_Eff_JQuery.create("")();
- var v4 = Control_Monad_Eff_JQuery.create("")();
- Control_Monad_Eff_JQuery.append(v4)(v3)();
- Control_Monad_Eff_JQuery.setText(v1.message)(v4)();
- Control_Monad_Eff_JQuery.append(v2)(v)();
- return Control_Monad_Eff_JQuery.append(v3)(v)();
+ var v2 = JQuery.create("")();
+ JQuery.addClass("error-banner")(v2)();
+ JQuery.setText("Error " + (Data_Show.show(Data_Show.showInt)(i + 1 | 0) + (" of " + Data_Show.show(Data_Show.showInt)(Data_Array.length(errs)))))(v2)();
+ var v3 = JQuery.create("")();
+ var v4 = JQuery.create("")();
+ JQuery.append(v4)(v3)();
+ JQuery.setText(v1.message)(v4)();
+ JQuery.append(v2)(v)();
+ return JQuery.append(v3)(v)();
};
};
})();
};
};
- var clearAnnotations = Control_Monad_Eff_Uncurried.runEffFn1($foreign.setAnnotations)([ ]);
+ var clearAnnotations = function () {
+ return $foreign.setAnnotations([ ]);
+ };
var compile = function (v) {
return function __do() {
var v1 = getTextAreaContent();
@@ -5296,12 +6010,12 @@ var PS = {};
return function __do() {
hideLoadingMessage();
if (bundleResult instanceof Data_Either.Left) {
- return Control_Monad_Eff_Console.error("Unable to retrieve JS bundle: " + bundleResult.value0)();
+ return Effect_Console.error("Unable to retrieve JS bundle: " + bundleResult.value0)();
};
if (bundleResult instanceof Data_Either.Right) {
- Data_Foldable.for_(Control_Monad_Eff.applicativeEff)(Data_Foldable.foldableMaybe)(Data_Newtype.unwrap(Data_Foreign_NullOrUndefined.newtypeNullOrUndefined)(res_.value0.value0.value0.warnings))(function (warnings_) {
+ Data_Foldable.for_(Effect.applicativeEffect)(Data_Foldable.foldableMaybe)(res_.value0.value0.value0.warnings)(function (warnings_) {
var toAnnotation = function (v3) {
- return Data_Functor.mapFlipped(Data_Maybe.functorMaybe)(Data_Newtype.unwrap(Data_Foreign_NullOrUndefined.newtypeNullOrUndefined)(v3.position))(function (v4) {
+ return Data_Functor.mapFlipped(Data_Maybe.functorMaybe)(v3.position)(function (v4) {
return {
row: v4.startLine - 1 | 0,
column: v4.startColumn - 1 | 0,
@@ -5310,11 +6024,13 @@ var PS = {};
};
});
};
- return Control_Monad_Eff_Uncurried.runEffFn1($foreign.setAnnotations)(Data_Array.mapMaybe(toAnnotation)(warnings_));
+ return function () {
+ return $foreign.setAnnotations(Data_Array.mapMaybe(toAnnotation)(warnings_));
+ };
})();
return execute(res_.value0.value0.value0.js)(bundleResult.value0)(v)();
};
- throw new Error("Failed pattern match at Main line 159, column 22 - line 171, column 51: " + [ bundleResult.constructor.name ]);
+ throw new Error("Failed pattern match at Main line 151, column 22 - line 163, column 51: " + [ bundleResult.constructor.name ]);
};
})();
};
@@ -5323,7 +6039,7 @@ var PS = {};
if (res_.value0.value0.value0.error instanceof Try_API.CompilerErrors) {
displayErrors(res_.value0.value0.value0.error.value0)();
var toAnnotation = function (v2) {
- return Data_Functor.mapFlipped(Data_Maybe.functorMaybe)(Data_Newtype.unwrap(Data_Foreign_NullOrUndefined.newtypeNullOrUndefined)(v2.position))(function (v3) {
+ return Data_Functor.mapFlipped(Data_Maybe.functorMaybe)(v2.position)(function (v3) {
return {
row: v3.startLine - 1 | 0,
column: v3.startColumn - 1 | 0,
@@ -5332,35 +6048,37 @@ var PS = {};
};
});
};
- Control_Monad_Eff_Uncurried.runEffFn1($foreign.setAnnotations)(Data_Array.mapMaybe(toAnnotation)(res_.value0.value0.value0.error.value0))();
- return Data_Foldable.for_(Control_Monad_Eff.applicativeEff)(Data_Foldable.foldableArray)(res_.value0.value0.value0.error.value0)(function (v2) {
- return Data_Foldable.for_(Control_Monad_Eff.applicativeEff)(Data_Foldable.foldableMaybe)(Data_Newtype.unwrap(Data_Foreign_NullOrUndefined.newtypeNullOrUndefined)(v2.position))(function (v3) {
- return Control_Monad_Eff_Uncurried.runEffFn5($foreign.addMarker)("error")(v3.startLine)(v3.startColumn)(v3.endLine)(v3.endColumn);
+ $foreign.setAnnotations(Data_Array.mapMaybe(toAnnotation)(res_.value0.value0.value0.error.value0));
+ return Data_Foldable.for_(Effect.applicativeEffect)(Data_Foldable.foldableArray)(res_.value0.value0.value0.error.value0)(function (v2) {
+ return Data_Foldable.for_(Effect.applicativeEffect)(Data_Foldable.foldableMaybe)(v2.position)(function (v3) {
+ return function () {
+ return $foreign.addMarker("error", v3.startLine, v3.startColumn, v3.endLine, v3.endColumn);
+ };
});
})();
};
if (res_.value0.value0.value0.error instanceof Try_API.OtherError) {
return displayPlainText(res_.value0.value0.value0.error.value0)();
};
- throw new Error("Failed pattern match at Main line 174, column 13 - line 195, column 53: " + [ res_.value0.value0.value0.error.constructor.name ]);
+ throw new Error("Failed pattern match at Main line 166, column 13 - line 187, column 53: " + [ res_.value0.value0.value0.error.constructor.name ]);
};
if (res_.value0 instanceof Data_Either.Left) {
hideLoadingMessage();
displayPlainText("Unable to parse the response from the server")();
- return Data_Foldable.traverse_(Control_Monad_Eff.applicativeEff)(Data_List_Types.foldableNonEmptyList)(function ($137) {
- return Control_Monad_Eff_Console.error(Data_Foreign.renderForeignError($137));
+ return Data_Foldable.traverse_(Effect.applicativeEffect)(Data_List_Types.foldableNonEmptyList)(function ($137) {
+ return Effect_Console.error(Foreign.renderForeignError($137));
})(res_.value0.value0)();
};
- throw new Error("Failed pattern match at Main line 151, column 9 - line 199, column 58: " + [ res_.value0.constructor.name ]);
+ throw new Error("Failed pattern match at Main line 143, column 9 - line 191, column 58: " + [ res_.value0.constructor.name ]);
};
};
- throw new Error("Failed pattern match at Main line 146, column 5 - line 199, column 58: " + [ res_.constructor.name ]);
+ throw new Error("Failed pattern match at Main line 138, column 5 - line 191, column 58: " + [ res_.constructor.name ]);
})();
};
};
var changeViewMode = function (viewMode) {
- return Data_Foldable.for_(Control_Monad_Eff.applicativeEff)(Data_Foldable.foldableMaybe)(viewMode)(function (viewMode_) {
- return Control_Bind.bind(Control_Monad_Eff.bindEff)(Control_Monad_Eff_JQuery.select("#editor_view"))(Control_Monad_Eff_JQuery.setAttr("data-view-mode")(viewMode_));
+ return Data_Foldable.for_(Effect.applicativeEffect)(Data_Foldable.foldableMaybe)(viewMode)(function (viewMode_) {
+ return Control_Bind.bind(Effect.bindEffect)(JQuery.select("#editor_view"))(JQuery.setAttr("data-view-mode")(viewMode_));
});
};
var loadOptions = function (bc) {
@@ -5368,34 +6086,34 @@ var PS = {};
var v = Try_QueryString.getQueryStringMaybe("view")();
(function () {
if (v instanceof Data_Maybe.Just && Data_Foldable.elem(Data_Foldable.foldableArray)(Data_Eq.eqString)(v.value0)([ "sidebyside", "code", "output" ])) {
- return changeViewMode(v);
+ return changeViewMode(v)();
};
- return Control_Applicative.pure(Control_Monad_Eff.applicativeEff)(Data_Unit.unit);
- })()();
+ return Data_Unit.unit;
+ })();
var v1 = Try_QueryString.getQueryStringMaybe("js")();
(function () {
if (v1 instanceof Data_Maybe.Just) {
- return Control_Bind.bind(Control_Monad_Eff.bindEff)(Control_Monad_Eff_JQuery.select("input:checkbox[name=showjs]"))(Control_Monad_Eff_JQuery.setProp("checked")(v1.value0 === "true"));
+ return Control_Bind.bind(Effect.bindEffect)(JQuery.select("input:checkbox[name=showjs]"))(JQuery.setProp("checked")(v1.value0 === "true"))();
};
- return Control_Applicative.pure(Control_Monad_Eff.applicativeEff)(Data_Unit.unit);
- })()();
+ return Data_Unit.unit;
+ })();
var v2 = Try_QueryString.getQueryStringMaybe("compile")();
(function () {
if (v2 instanceof Data_Maybe.Just) {
- return Control_Bind.bind(Control_Monad_Eff.bindEff)(Control_Monad_Eff_JQuery.select("input:checkbox[name=auto_compile]"))(Control_Monad_Eff_JQuery.setProp("checked")(v2.value0 === "true"));
+ return Control_Bind.bind(Effect.bindEffect)(JQuery.select("input:checkbox[name=auto_compile]"))(JQuery.setProp("checked")(v2.value0 === "true"))();
};
- return Control_Applicative.pure(Control_Monad_Eff.applicativeEff)(Data_Unit.unit);
- })()();
+ return Data_Unit.unit;
+ })();
var v3 = Try_QueryString.getQueryStringMaybe("gist")();
if (v3 instanceof Data_Maybe.Just) {
- return Control_Bind.bind(Control_Monad_Eff.bindEff)(Control_Monad_Eff_JQuery.select(".view_gist"))(Control_Monad_Eff_JQuery.attr({
+ return Control_Bind.bind(Effect.bindEffect)(JQuery.select(".view_gist"))(JQuery.attr({
href: "https://gist.github.com/" + v3.value0
}))();
};
if (v3 instanceof Data_Maybe.Nothing) {
- return Control_Bind.bind(Control_Monad_Eff.bindEff)(Control_Monad_Eff_JQuery.select(".view_gist_li"))(Control_Monad_Eff_JQuery.hide)();
+ return Control_Bind.bind(Effect.bindEffect)(JQuery.select(".view_gist_li"))(JQuery.hide)();
};
- throw new Error("Failed pattern match at Main line 402, column 3 - line 404, column 61: " + [ v3.constructor.name ]);
+ throw new Error("Failed pattern match at Main line 340, column 3 - line 342, column 61: " + [ v3.constructor.name ]);
};
};
var cacheCurrentCode = function (v) {
@@ -5409,27 +6127,27 @@ var PS = {};
})();
};
if (v1 instanceof Data_Maybe.Nothing) {
- return Control_Monad_Eff_Console.error("No session ID")();
+ return Effect_Console.error("No session ID")();
};
- throw new Error("Failed pattern match at Main line 334, column 3 - line 340, column 1: " + [ v1.constructor.name ]);
+ throw new Error("Failed pattern match at Main line 288, column 3 - line 294, column 1: " + [ v1.constructor.name ]);
};
};
var setupBackendMenu = function (v) {
return function __do() {
- Control_Bind.bind(Control_Monad_Eff.bindEff)(Control_Monad_Eff_JQuery.select("#backend_" + v.backend))(Control_Monad_Eff_JQuery.attr({
+ Control_Bind.bind(Effect.bindEffect)(JQuery.select("#backend_" + v.backend))(JQuery.attr({
checked: "checked"
}))();
- return Control_Bind.bind(Control_Monad_Eff.bindEff)(Control_Monad_Eff_JQuery.select("input[name=backend_inputs]"))(Control_Monad_Eff_JQuery.on("change")(function (e) {
+ return Control_Bind.bind(Effect.bindEffect)(JQuery.select("input[name=backend_inputs]"))(JQuery.on("change")(function (e) {
return function (jq) {
return function __do() {
- var v1 = Data_Functor.map(Control_Monad_Eff.functorEff)(function ($138) {
+ var v1 = Data_Functor.map(Effect.functorEffect)(function ($138) {
return Try_API.getBackendConfigFromString(Data_Maybe.fromMaybe("core")($138));
- })(Control_Monad_Eff_JQuery_Extras.getValueMaybe(jq))();
- var v2 = Control_Bind.bind(Control_Monad_Eff.bindEff)(DOM_HTML.window)(DOM_HTML_Window.confirm("Replace your current code with the " + (v1.backend + " backend sample code?")))();
+ })(JQuery_Extras.getValueMaybe(jq))();
+ var v2 = Control_Bind.bind(Effect.bindEffect)(Web_HTML.window)(Web_HTML_Window.confirm("Replace your current code with the " + (v1.backend + " backend sample code?")))();
if (v2) {
return navigateTo("?backend=" + v1.backend)();
};
- return Data_Functor["void"](Control_Monad_Eff.functorEff)(Control_Monad_Eff_Timer.setTimeout(1000)(function __do() {
+ return Data_Functor["void"](Effect.functorEffect)(Effect_Timer.setTimeout(1000)(function __do() {
compile(v1)();
return cacheCurrentCode(v1)();
}))();
@@ -5443,26 +6161,24 @@ var PS = {};
loadOptions(v.backend)();
setupBackendMenu(v.backend)();
setTextAreaContent(v.code)();
- Control_Monad_Eff_Uncurried.runEffFn1($foreign.setEditorContent)(v.code)();
- Control_Monad_Eff_Uncurried.runEffFn2($foreign.onEditorChanged)(Control_Monad_Eff_Uncurried.mkEffFn1(function (value) {
- return function __do() {
- setTextAreaContent(value)();
- cacheCurrentCode(v.backend)();
- var v1 = isAutoCompileChecked();
- return Control_Applicative.when(Control_Monad_Eff.applicativeEff)(v1)(compile(v.backend))();
- };
- }))(750)();
- Control_Bind.bind(Control_Monad_Eff.bindEff)(Control_Monad_Eff_JQuery.select("#showjs"))(Control_Monad_Eff_JQuery.on("change")(function (e) {
+ $foreign.setEditorContent(v.code);
+ $foreign.onEditorChanged(function (value) {
+ setTextAreaContent(value)();
+ cacheCurrentCode(v.backend)();
+ var v1 = isAutoCompileChecked();
+ return Control_Applicative.when(Effect.applicativeEffect)(v1)(compile(v.backend))();
+ }, 750);
+ Control_Bind.bind(Effect.bindEffect)(JQuery.select("#showjs"))(JQuery.on("change")(function (e) {
return function (v1) {
return compile(v.backend);
};
}))();
- Control_Bind.bind(Control_Monad_Eff.bindEff)(Control_Monad_Eff_JQuery.select("#compile_label"))(Control_Monad_Eff_JQuery.on("click")(function (e) {
+ Control_Bind.bind(Effect.bindEffect)(JQuery.select("#compile_label"))(JQuery.on("click")(function (e) {
return function (v1) {
return compile(v.backend);
};
}))();
- Control_Bind.bind(Control_Monad_Eff.bindEff)(Control_Monad_Eff_JQuery.select("#gist_save"))(Control_Monad_Eff_JQuery.on("click")(function (e) {
+ Control_Bind.bind(Effect.bindEffect)(JQuery.select("#gist_save"))(JQuery.on("click")(function (e) {
return function (v1) {
return publishNewGist(v.backend);
};
@@ -5471,16 +6187,16 @@ var PS = {};
return cacheCurrentCode(v.backend)();
};
};
- var main = Control_Monad_Eff_JQuery.ready(function __do() {
- Control_Bind.bind(Control_Monad_Eff.bindEff)(Control_Monad_Eff_JQuery.select("input[name=view_mode]"))(Control_Monad_Eff_JQuery.on("change")(function (v) {
+ var main = JQuery.ready(function __do() {
+ Control_Bind.bind(Effect.bindEffect)(JQuery.select("input[name=view_mode]"))(JQuery.on("change")(function (v) {
return function (jq) {
return function __do() {
- var v1 = Control_Bind.bind(Control_Monad_Eff.bindEff)(Control_Monad_Eff_JQuery_Extras.filter(jq)(":checked"))(Control_Monad_Eff_JQuery_Extras.getValueMaybe)();
+ var v1 = Control_Bind.bind(Effect.bindEffect)(JQuery_Extras.filter(jq)(":checked"))(JQuery_Extras.getValueMaybe)();
return changeViewMode(v1)();
};
};
}))();
- return Control_Monad_Cont_Trans.runContT(Control_Bind.bind(Control_Monad_Cont_Trans.bindContT(Control_Monad_Eff.bindEff))(Try_Session.createSessionIdIfNecessary)(function (v) {
+ return Control_Monad_Cont_Trans.runContT(Control_Bind.bind(Control_Monad_Cont_Trans.bindContT(Effect.bindEffect))(Try_Session.createSessionIdIfNecessary)(function (v) {
return withSession(v);
}))(setupEditor)();
});
@@ -5512,4 +6228,4 @@ var PS = {};
exports["setAnnotations"] = $foreign.setAnnotations;
exports["setupIFrame"] = $foreign.setupIFrame;
})(PS["Main"] = PS["Main"] || {});
-PS["Main"].main();
+PS["Main"].main();
\ No newline at end of file
diff --git a/src/Control/Monad/Eff/JQuery/Extras.purs b/src/Control/Monad/Eff/JQuery/Extras.purs
deleted file mode 100644
index 5ba8d381..00000000
--- a/src/Control/Monad/Eff/JQuery/Extras.purs
+++ /dev/null
@@ -1,41 +0,0 @@
-module Control.Monad.Eff.JQuery.Extras
- ( click
- , empty
- , fadeIn
- , fadeOut
- , filter
- , is
- , getValueMaybe
- ) where
-
-import Prelude
-
-import Control.Monad.Eff (Eff)
-import Control.Monad.Eff.JQuery (JQuery, Selector)
-import DOM (DOM)
-import Data.Maybe (Maybe)
-import Data.Nullable (Nullable, toMaybe)
-
--- | Simulate a click event on the specified element.
-foreign import click :: forall eff. JQuery -> Eff (dom :: DOM | eff) Unit
-
--- | Remove all elements from the specified container element.
-foreign import empty :: forall eff. JQuery -> Eff (dom :: DOM | eff) Unit
-
--- | Fade in an element.
-foreign import fadeIn :: forall eff. JQuery -> Eff (dom :: DOM | eff) Unit
-
--- | Fade out an element.
-foreign import fadeOut :: forall eff. JQuery -> Eff (dom :: DOM | eff) Unit
-
--- | Filter elements based on an additional selector.
-foreign import filter :: forall eff. JQuery -> Selector -> Eff (dom :: DOM | eff) JQuery
-
--- | Test whether elements match an additional selector.
-foreign import is :: forall eff. JQuery -> Selector -> Eff (dom :: DOM | eff) Boolean
-
--- | Get the value of the first element, if it exists.
-foreign import getValue :: forall eff. JQuery -> Eff (dom :: DOM | eff) (Nullable String)
-
-getValueMaybe :: forall eff. JQuery -> Eff (dom :: DOM | eff) (Maybe String)
-getValueMaybe = map toMaybe <<< getValue
diff --git a/src/Control/Monad/Eff/JQuery/Extras.js b/src/JQuery/Extras.js
similarity index 100%
rename from src/Control/Monad/Eff/JQuery/Extras.js
rename to src/JQuery/Extras.js
diff --git a/src/JQuery/Extras.purs b/src/JQuery/Extras.purs
new file mode 100644
index 00000000..4602893f
--- /dev/null
+++ b/src/JQuery/Extras.purs
@@ -0,0 +1,40 @@
+module JQuery.Extras
+ ( click
+ , empty
+ , fadeIn
+ , fadeOut
+ , filter
+ , is
+ , getValueMaybe
+ ) where
+
+import Prelude
+
+import Data.Maybe (Maybe)
+import Data.Nullable (Nullable, toMaybe)
+import Effect (Effect)
+import JQuery (JQuery, Selector)
+
+-- | Simulate a click event on the specified element.
+foreign import click :: JQuery -> Effect Unit
+
+-- | Remove all elements from the specified container element.
+foreign import empty :: JQuery -> Effect Unit
+
+-- | Fade in an element.
+foreign import fadeIn :: JQuery -> Effect Unit
+
+-- | Fade out an element.
+foreign import fadeOut :: JQuery -> Effect Unit
+
+-- | Filter elements based on an additional selector.
+foreign import filter :: JQuery -> Selector -> Effect JQuery
+
+-- | Test whether elements match an additional selector.
+foreign import is :: JQuery -> Selector -> Effect Boolean
+
+-- | Get the value of the first element, if it exists.
+foreign import getValue :: JQuery -> Effect (Nullable String)
+
+getValueMaybe :: JQuery -> Effect (Maybe String)
+getValueMaybe = map toMaybe <<< getValue
diff --git a/src/Main.purs b/src/Main.purs
index 10615a9d..5ae596ff 100644
--- a/src/Main.purs
+++ b/src/Main.purs
@@ -3,51 +3,48 @@ module Main where
import Prelude
import Control.Monad.Cont.Trans (ContT(..), runContT)
-import Control.Monad.Eff (Eff)
-import Control.Monad.Eff.Console (CONSOLE, error)
-import Control.Monad.Eff.JQuery (JQuery, addClass, append, setText, setAttr, attr, create, hide, on, ready, select, setProp, setValue) as JQuery
-import Control.Monad.Eff.JQuery.Extras (empty, fadeIn, fadeOut, filter, getValueMaybe, is) as JQuery
-import Control.Monad.Eff.Random (RANDOM)
-import Control.Monad.Eff.Timer (TIMER, setTimeout)
-import Control.Monad.Eff.Uncurried (EffFn1, EffFn2, EffFn3, EffFn5, mkEffFn1, runEffFn1, runEffFn2, runEffFn3, runEffFn5)
import Control.Monad.Except.Trans (runExceptT)
-import DOM (DOM)
-import DOM.HTML (window)
-import DOM.HTML.Location (setHref)
-import DOM.HTML.Types (ALERT, CONFIRM)
-import DOM.HTML.Window (alert, confirm, location)
import Data.Array (mapMaybe)
import Data.Array as Array
import Data.Either (Either(..))
import Data.Foldable (elem, fold, for_, intercalate, traverse_)
import Data.FoldableWithIndex (forWithIndex_)
-import Data.Foreign (renderForeignError)
import Data.Maybe (Maybe(..), fromMaybe)
import Data.Newtype (unwrap)
-import Data.StrMap as StrMap
import Data.String (joinWith)
import Data.String as String
import Data.String.Regex (replace')
import Data.String.Regex.Flags (global)
import Data.String.Regex.Unsafe (unsafeRegex)
+import Effect (Effect)
+import Effect.Console (error)
+import Effect.Timer (setTimeout)
+import Effect.Uncurried (EffectFn1, EffectFn2, EffectFn3, EffectFn5, mkEffectFn1, runEffectFn1, runEffectFn2, runEffectFn3, runEffectFn5)
+import Foreign (renderForeignError)
+import Foreign.Object as Object
+import JQuery as JQuery
+import JQuery.Extras as JQueryExtras
import Try.API (BackendConfig(..), CompileError(..), CompileResult(..), CompileWarning(..), CompilerError(..), ErrorPosition(..), FailedResult(..), SuccessResult(..), getBackendConfigFromString)
import Try.API as API
import Try.Gist (getGistById, tryLoadFileFromGist, uploadGist)
import Try.QueryString (getQueryStringMaybe, setQueryStrings)
import Try.Session (createSessionIdIfNecessary, storeSession, tryRetrieveSession)
import Try.Types (JS(..))
+import Web.HTML (window)
+import Web.HTML.Location (setHref)
+import Web.HTML.Window (alert, confirm, location)
-displayLoadingMessage :: forall eff. Eff (dom :: DOM | eff) Unit
-displayLoadingMessage = JQuery.select "#loading" >>= JQuery.fadeIn
+displayLoadingMessage :: Effect Unit
+displayLoadingMessage = JQuery.select "#loading" >>= JQueryExtras.fadeIn
-hideLoadingMessage :: forall eff. Eff (dom :: DOM | eff) Unit
-hideLoadingMessage = JQuery.select "#loading" >>= JQuery.fadeOut
+hideLoadingMessage :: Effect Unit
+hideLoadingMessage = JQuery.select "#loading" >>= JQueryExtras.fadeOut
-- | Display a list of errors in the right hand column.
-displayErrors :: forall eff. Array CompilerError -> Eff (dom :: DOM | eff) Unit
+displayErrors :: Array CompilerError -> Effect Unit
displayErrors errs = do
column2 <- JQuery.select "#column2"
- JQuery.empty column2
+ JQueryExtras.empty column2
forWithIndex_ errs \i (CompilerError{ message }) -> do
h1 <- JQuery.create ""
@@ -64,52 +61,49 @@ displayErrors errs = do
-- | Display plain text in the right hand column.
displayPlainText
- :: forall eff
- . String
- -> Eff (dom :: DOM | eff) Unit
+ :: String
+ -> Effect Unit
displayPlainText s = do
column2 <- JQuery.select "#column2"
- JQuery.empty column2
+ JQueryExtras.empty column2
pre <- JQuery.create ""
code_ <- JQuery.create ""
JQuery.append code_ pre
JQuery.setText s code_
JQuery.append pre column2
-isShowJsChecked :: forall eff. Eff (dom :: DOM | eff) Boolean
-isShowJsChecked = JQuery.select "#showjs" >>= \jq -> JQuery.is jq ":checked"
+isShowJsChecked :: Effect Boolean
+isShowJsChecked = JQuery.select "#showjs" >>= \jq -> JQueryExtras.is jq ":checked"
-isAutoCompileChecked :: forall eff. Eff (dom :: DOM | eff) Boolean
-isAutoCompileChecked = JQuery.select "#auto_compile" >>= \jq -> JQuery.is jq ":checked"
+isAutoCompileChecked :: Effect Boolean
+isAutoCompileChecked = JQuery.select "#auto_compile" >>= \jq -> JQueryExtras.is jq ":checked"
-- | Update the view mode based on the menu selection
-changeViewMode :: forall eff. Maybe String -> Eff (dom :: DOM | eff) Unit
+changeViewMode :: Maybe String -> Effect Unit
changeViewMode viewMode =
for_ viewMode \viewMode_ ->
JQuery.select "#editor_view" >>= JQuery.setAttr "data-view-mode" viewMode_
-getTextAreaContent :: forall eff. Eff (dom :: DOM | eff) String
-getTextAreaContent = fold <$> (JQuery.select "#code_textarea" >>= JQuery.getValueMaybe)
+getTextAreaContent :: Effect String
+getTextAreaContent = fold <$> (JQuery.select "#code_textarea" >>= JQueryExtras.getValueMaybe)
-setTextAreaContent :: forall eff. String -> Eff (dom :: DOM | eff) Unit
+setTextAreaContent :: String -> Effect Unit
setTextAreaContent value = JQuery.select "#code_textarea" >>= JQuery.setValue value
-- | Set the editor content to the specified string.
-foreign import setEditorContent :: forall eff. EffFn1 (dom :: DOM | eff) String Unit
+foreign import setEditorContent :: EffectFn1 String Unit
-- | Register a callback for editor change events.
foreign import onEditorChanged
- :: forall eff
- . EffFn2 (dom :: DOM | eff)
- (EffFn1 (dom :: DOM | eff) String Unit)
- Int
- Unit
+ :: EffectFn2 (EffectFn1 String Unit)
+ Int
+ Unit
-- | Clean up any global state associated with any visible error markers.
-foreign import cleanUpMarkers :: forall eff. Eff (dom :: DOM | eff) Unit
+foreign import cleanUpMarkers :: Effect Unit
-- | Add a visible marker at the specified location.
-foreign import addMarker :: forall eff. EffFn5 (dom :: DOM | eff) String Int Int Int Int Unit
+foreign import addMarker :: EffectFn5 String Int Int Int Int Unit
type Annotation =
{ row :: Int
@@ -119,23 +113,21 @@ type Annotation =
}
-- | Set the gutter annotations
-foreign import setAnnotations :: forall eff. EffFn1 (dom :: DOM | eff) (Array Annotation) Unit
+foreign import setAnnotations :: EffectFn1 (Array Annotation) Unit
-clearAnnotations :: forall eff. Eff (dom :: DOM | eff) Unit
-clearAnnotations = runEffFn1 setAnnotations []
+clearAnnotations :: Effect Unit
+clearAnnotations = runEffectFn1 setAnnotations []
-- | Set up a fresh iframe in the specified container, and use it
-- | to execute the provided JavaScript code.
foreign import setupIFrame
- :: forall eff
- . EffFn3 (dom :: DOM | eff)
- JQuery.JQuery
- String
- String
- Unit
+ :: EffectFn3 JQuery.JQuery
+ String
+ String
+ Unit
-- | Compile the current code and execute it.
-compile :: forall eff. BackendConfig -> Eff (console :: CONSOLE, dom :: DOM | eff) Unit
+compile :: BackendConfig -> Effect Unit
compile bc@(BackendConfig backend) = do
code <- getTextAreaContent
@@ -159,15 +151,15 @@ compile bc@(BackendConfig backend) = do
case bundleResult of
Left err -> error ("Unable to retrieve JS bundle: " <> err)
Right bundle -> do
- for_ (unwrap warnings) \warnings_ -> do
+ for_ warnings \warnings_ -> do
let toAnnotation (CompileWarning{ errorCode, position, message }) =
- unwrap position <#> \(ErrorPosition pos) ->
+ position <#> \(ErrorPosition pos) ->
{ row: pos.startLine - 1
, column: pos.startColumn - 1
, type: "warning"
, text: message
}
- runEffFn1 setAnnotations (mapMaybe toAnnotation warnings_)
+ runEffectFn1 setAnnotations (mapMaybe toAnnotation warnings_)
execute (JS js) bundle bc
Right (CompileFailed (FailedResult { error })) -> do
hideLoadingMessage
@@ -176,17 +168,17 @@ compile bc@(BackendConfig backend) = do
displayErrors errs
let toAnnotation (CompilerError{ position, message }) =
- unwrap position <#> \(ErrorPosition pos) ->
+ position <#> \(ErrorPosition pos) ->
{ row: pos.startLine - 1
, column: pos.startColumn - 1
, type: "error"
, text: message
}
- runEffFn1 setAnnotations (mapMaybe toAnnotation errs)
+ runEffectFn1 setAnnotations (mapMaybe toAnnotation errs)
for_ errs \(CompilerError{ position }) ->
- for_ (unwrap position) \(ErrorPosition pos) ->
- runEffFn5 addMarker
+ for_ position \(ErrorPosition pos) ->
+ runEffectFn5 addMarker
"error"
pos.startLine
pos.startColumn
@@ -199,7 +191,7 @@ compile bc@(BackendConfig backend) = do
traverse_ (error <<< renderForeignError) errs
-- | Execute the compiled code in a new iframe.
-execute :: forall eff. JS -> JS -> BackendConfig -> Eff (dom :: DOM | eff) Unit
+execute :: JS -> JS -> BackendConfig -> Effect Unit
execute js bundle bc@(BackendConfig backend) = do
let html = joinWith "\n"
[ """"""
@@ -219,7 +211,7 @@ execute js bundle bc@(BackendConfig backend) = do
]
replaced = replace' (unsafeRegex """require\("[^"]*"\)""" global) (\s _ ->
- "PS['" <> String.drop 12 (String.take (String.length s - 2) s) <> "']") (unwrap js)
+ "PS['" <> String.drop 12 (String.take (String.length s - 11) s) <> "']") (unwrap js)
wrapped = joinWith "\n"
[ "var module = {};"
@@ -232,27 +224,18 @@ execute js bundle bc@(BackendConfig backend) = do
scripts = joinWith "\n" [unwrap bundle, wrapped]
column2 <- JQuery.select "#column2"
- runEffFn3 setupIFrame column2 html scripts
+ runEffectFn3 setupIFrame column2 html scripts
-- | Setup the editor component and some event handlers.
-setupEditor
- :: forall eff
- . { code :: String, backend :: BackendConfig }
- -> Eff ( alert :: ALERT
- , console :: CONSOLE
- , confirm :: CONFIRM
- , dom :: DOM
- , timer :: TIMER
- | eff
- ) Unit
+setupEditor :: { code :: String, backend :: BackendConfig } -> Effect Unit
setupEditor { code, backend } = do
loadOptions backend
setupBackendMenu backend
setTextAreaContent code
- runEffFn1 setEditorContent code
+ runEffectFn1 setEditorContent code
- runEffFn2 onEditorChanged (mkEffFn1 \value -> do
+ runEffectFn2 onEditorChanged (mkEffectFn1 \value -> do
setTextAreaContent value
cacheCurrentCode backend
autoCompile <- isAutoCompileChecked
@@ -272,22 +255,10 @@ setupEditor { code, backend } = do
cacheCurrentCode backend
loadFromGist
- :: forall eff
- . String
+ :: String
-> BackendConfig
- -> ({ code :: String, backend :: BackendConfig }
- -> Eff ( alert :: ALERT
- , console :: CONSOLE
- , dom :: DOM
- , timer :: TIMER
- | eff
- ) Unit)
- -> Eff ( alert :: ALERT
- , console :: CONSOLE
- , dom :: DOM
- , timer :: TIMER
- | eff
- ) Unit
+ -> ({ code :: String, backend :: BackendConfig } -> Effect Unit)
+ -> Effect Unit
loadFromGist id_ backend k = do
runContT (runExceptT (getGistById id_ >>= \gi -> tryLoadFileFromGist gi "Main.purs")) $
case _ of
@@ -297,23 +268,9 @@ loadFromGist id_ backend k = do
Right code -> k { code, backend }
withSession
- :: forall eff
- . String
- -> ({ code :: String, backend :: BackendConfig }
- -> Eff ( alert :: ALERT
- , confirm :: CONFIRM
- , console :: CONSOLE
- , dom :: DOM
- , timer :: TIMER
- | eff
- ) Unit)
- -> Eff ( alert :: ALERT
- , confirm :: CONFIRM
- , console :: CONSOLE
- , dom :: DOM
- , timer :: TIMER
- | eff
- ) Unit
+ :: String
+ -> ({ code :: String, backend :: BackendConfig } -> Effect Unit)
+ -> Effect Unit
withSession sessionId k = do
state <- tryRetrieveSession sessionId
case state of
@@ -325,10 +282,7 @@ withSession sessionId k = do
loadFromGist gist bc k
-- | Cache the current code in the session state
-cacheCurrentCode
- :: forall eff
- . BackendConfig
- -> Eff (console :: CONSOLE, dom :: DOM | eff) Unit
+cacheCurrentCode :: BackendConfig -> Effect Unit
cacheCurrentCode bc@(BackendConfig backend) = do
sessionId <- getQueryStringMaybe "session"
case sessionId of
@@ -338,15 +292,7 @@ cacheCurrentCode bc@(BackendConfig backend) = do
Nothing -> error "No session ID"
-- | Create a new Gist using the current content
-publishNewGist
- :: forall eff
- . BackendConfig
- -> Eff ( alert :: ALERT
- , confirm :: CONFIRM
- , console :: CONSOLE
- , dom :: DOM
- | eff
- ) Unit
+publishNewGist :: BackendConfig -> Effect Unit
publishNewGist bc@(BackendConfig backend) = do
ok <- window >>= confirm (intercalate "\n"
[ "Do you really want to publish this code as an anonymous Gist?"
@@ -361,23 +307,15 @@ publishNewGist bc@(BackendConfig backend) = do
window >>= alert "Failed to create gist"
error ("Failed to create gist: " <> err)
Right gistId -> do
- setQueryStrings (StrMap.singleton "gist" gistId <>
- StrMap.singleton "backend" backend.backend)
+ setQueryStrings (Object.singleton "gist" gistId <>
+ Object.singleton "backend" backend.backend)
-- | Navigate to the specified URL.
-navigateTo :: forall eff. String -> Eff (dom :: DOM | eff) Unit
+navigateTo :: String -> Effect Unit
navigateTo uri = void (window >>= location >>= setHref uri)
-- | Read query string options and update the state accordingly
-loadOptions
- :: forall eff
- . BackendConfig
- -> Eff ( console :: CONSOLE
- , confirm :: CONFIRM
- , dom :: DOM
- , timer :: TIMER
- | eff
- ) Unit
+loadOptions :: BackendConfig -> Effect Unit
loadOptions bc = do
viewMode <- getQueryStringMaybe "view"
case viewMode of
@@ -404,21 +342,11 @@ loadOptions bc = do
Nothing -> JQuery.select ".view_gist_li" >>= JQuery.hide
-- | Setup event listeners for the backend dropdown menu.
-setupBackendMenu
- :: forall eff
- . BackendConfig
- -> Eff
- ( dom :: DOM
- , confirm :: CONFIRM
- , console :: CONSOLE
- , timer :: TIMER
- | eff
- )
- Unit
+setupBackendMenu :: BackendConfig -> Effect Unit
setupBackendMenu bc@(BackendConfig backend) = do
JQuery.select ("#backend_" <> backend.backend) >>= JQuery.attr { checked: "checked" }
JQuery.select "input[name=backend_inputs]" >>= JQuery.on "change" \e jq -> do
- bc_@(BackendConfig newBackend) <- getBackendConfigFromString <<< fromMaybe "core" <$> JQuery.getValueMaybe jq
+ bc_@(BackendConfig newBackend) <- getBackendConfigFromString <<< fromMaybe "core" <$> JQueryExtras.getValueMaybe jq
ok <- window >>= confirm ("Replace your current code with the " <> newBackend.backend <> " backend sample code?")
if ok
@@ -427,16 +355,10 @@ setupBackendMenu bc@(BackendConfig backend) = do
compile bc_
cacheCurrentCode bc_
-main :: Eff ( alert :: ALERT
- , confirm :: CONFIRM
- , console :: CONSOLE
- , dom :: DOM
- , random :: RANDOM
- , timer :: TIMER
- ) Unit
+main :: Effect Unit
main = JQuery.ready do
JQuery.select "input[name=view_mode]" >>= JQuery.on "change" \_ jq -> do
- viewMode <- JQuery.filter jq ":checked" >>= JQuery.getValueMaybe
+ viewMode <- JQueryExtras.filter jq ":checked" >>= JQueryExtras.getValueMaybe
changeViewMode viewMode
runContT (do sessionId <- ContT createSessionIdIfNecessary
diff --git a/src/Try/API.purs b/src/Try/API.purs
index 41539e14..16665187 100644
--- a/src/Try/API.purs
+++ b/src/Try/API.purs
@@ -17,24 +17,23 @@ import Prelude
import Control.Alt ((<|>))
import Control.Monad.Cont.Trans (ContT(ContT))
-import Control.Monad.Eff (Eff)
-import Control.Monad.Eff.Uncurried (EffFn1, EffFn3, EffFn4, mkEffFn1, runEffFn3, runEffFn4)
import Control.Monad.Except (runExcept)
import Control.Monad.Except.Trans (ExceptT(ExceptT))
import Control.Parallel (parTraverse)
-import DOM (DOM)
import Data.Array (fold, intercalate)
import Data.Either (Either(..))
-import Data.Foreign (Foreign, ForeignError)
-import Data.Foreign.Class (class Decode, decode)
-import Data.Foreign.Generic (defaultOptions, genericDecode)
-import Data.Foreign.Generic.Types (Options, SumEncoding(..))
-import Data.Foreign.NullOrUndefined (NullOrUndefined)
import Data.Generic.Rep (class Generic)
import Data.List.NonEmpty (NonEmptyList)
+import Data.Maybe (Maybe)
import Data.String.Regex (replace)
import Data.String.Regex.Flags (global)
import Data.String.Regex.Unsafe (unsafeRegex)
+import Effect (Effect)
+import Effect.Uncurried (EffectFn1, EffectFn3, EffectFn4, mkEffectFn1, runEffectFn3, runEffectFn4)
+import Foreign (Foreign, ForeignError)
+import Foreign.Class (class Decode, decode)
+import Foreign.Generic (defaultOptions, genericDecode)
+import Foreign.Generic.Types (Options, SumEncoding(..))
import Partial.Unsafe (unsafePartial)
import Try.Types (JS(JS))
@@ -56,7 +55,7 @@ instance decodeErrorPosition :: Decode ErrorPosition where
newtype CompilerError = CompilerError
{ message :: String
- , position :: NullOrUndefined ErrorPosition
+ , position :: Maybe ErrorPosition
}
derive instance genericCompilerError :: Generic CompilerError _
@@ -78,13 +77,13 @@ instance decodeCompileError :: Decode CompileError where
TaggedObject
{ tagFieldName: "tag"
, contentsFieldName: "contents"
- , constructorTagTransform: id
+ , constructorTagTransform: identity
}
})
newtype Suggestion = Suggestion
{ replacement :: String
- , replaceRange :: NullOrUndefined ErrorPosition
+ , replaceRange :: Maybe ErrorPosition
}
derive instance genericSuggestion :: Generic Suggestion _
@@ -95,8 +94,8 @@ instance decodeSuggestion :: Decode Suggestion where
newtype CompileWarning = CompileWarning
{ errorCode :: String
, message :: String
- , position :: NullOrUndefined ErrorPosition
- , suggestion :: NullOrUndefined Suggestion
+ , position :: Maybe ErrorPosition
+ , suggestion :: Maybe Suggestion
}
derive instance genericCompileWarning :: Generic CompileWarning _
@@ -106,7 +105,7 @@ instance decodeCompileWarning :: Decode CompileWarning where
newtype SuccessResult = SuccessResult
{ js :: String
- , warnings :: NullOrUndefined (Array CompileWarning)
+ , warnings :: Maybe (Array CompileWarning)
}
derive instance genericSuccessResult :: Generic SuccessResult _
@@ -134,29 +133,26 @@ instance decodeCompileResult :: Decode CompileResult where
<|> CompileFailed <$> genericDecode decodingOptions f
foreign import get_
- :: forall eff
- . EffFn3 (dom :: DOM | eff)
+ :: EffectFn3
String
- (EffFn1 (dom :: DOM | eff) String Unit)
- (EffFn1 (dom :: DOM | eff) String Unit)
+ (EffectFn1 String Unit)
+ (EffectFn1 String Unit)
Unit
-- | A wrapper for `get` which uses `ContT`.
-get :: forall eff. String -> ExceptT String (ContT Unit (Eff (dom :: DOM | eff))) String
-get uri = ExceptT (ContT \k -> runEffFn3 get_ uri (mkEffFn1 (k <<< Right)) (mkEffFn1 (k <<< Left)))
+get :: String -> ExceptT String (ContT Unit Effect) String
+get uri = ExceptT (ContT \k -> runEffectFn3 get_ uri (mkEffectFn1 (k <<< Right)) (mkEffectFn1 (k <<< Left)))
-- | Get the default bundle
getDefaultBundle
- :: forall eff
- . String
- -> ExceptT String (ContT Unit (Eff (dom :: DOM | eff))) JS
+ :: String
+ -> ExceptT String (ContT Unit Effect) JS
getDefaultBundle endpoint = JS <$> get (endpoint <> "/bundle")
-- | Get the JS bundle for the Thermite backend, which includes additional dependencies
getThermiteBundle
- :: forall eff
- . String
- -> ExceptT String (ContT Unit (Eff (dom :: DOM | eff))) JS
+ :: String
+ -> ExceptT String (ContT Unit Effect) JS
getThermiteBundle endpoint =
let getAll = parTraverse get
[ "js/console.js"
@@ -179,33 +175,30 @@ getThermiteBundle endpoint =
-- | POST the specified code to the Try PureScript API, and wait for
-- | a response.
foreign import compile_
- :: forall eff
- . EffFn4 (dom :: DOM | eff)
+ :: EffectFn4
String
String
- (EffFn1 (dom :: DOM | eff) Foreign Unit)
- (EffFn1 (dom :: DOM | eff) String Unit)
+ (EffectFn1 Foreign Unit)
+ (EffectFn1 String Unit)
Unit
-- | A wrapper for `compileApi` which uses `ContT`.
compile
- :: forall eff
- . String
+ :: String
-> String
- -> ExceptT String (ContT Unit (Eff (dom :: DOM | eff)))
+ -> ExceptT String (ContT Unit Effect)
(Either (NonEmptyList ForeignError) CompileResult)
-compile endpoint code = ExceptT (ContT \k -> runEffFn4 compile_ endpoint code (mkEffFn1 (k <<< Right <<< runExcept <<< decode)) (mkEffFn1 (k <<< Left)))
+compile endpoint code = ExceptT (ContT \k -> runEffectFn4 compile_ endpoint code (mkEffectFn1 (k <<< Right <<< runExcept <<< decode)) (mkEffectFn1 (k <<< Left)))
newtype BackendConfig = BackendConfig
{ backend :: String
, mainGist :: String
, extra_styling :: String
, extra_body :: String
- , compile :: forall eff
- . String
- -> ExceptT String (ContT Unit (Eff (dom :: DOM | eff)))
+ , compile :: String
+ -> ExceptT String (ContT Unit Effect)
(Either (NonEmptyList ForeignError) CompileResult)
- , getBundle :: forall eff. ExceptT String (ContT Unit (Eff (dom :: DOM | eff))) JS
+ , getBundle :: ExceptT String (ContT Unit Effect) JS
}
data Backend
diff --git a/src/Try/Gist.purs b/src/Try/Gist.purs
index 172b40cb..6057e291 100644
--- a/src/Try/Gist.purs
+++ b/src/Try/Gist.purs
@@ -9,48 +9,41 @@ module Try.Gist
import Prelude
import Control.Monad.Cont.Trans (ContT(..))
-import Control.Monad.Eff (Eff)
-import Control.Monad.Eff.Uncurried (EffFn1, EffFn3, EffFn4, mkEffFn1, runEffFn3, runEffFn4)
import Control.Monad.Except.Trans (ExceptT(..))
-import DOM (DOM)
import Data.Either (Either(..))
+import Effect (Effect)
+import Effect.Uncurried (EffectFn1, EffectFn3, EffectFn4, mkEffectFn1, runEffectFn3, runEffectFn4)
-- | An abstract data type representing the data we get back from the GitHub API.
data GistInfo
foreign import uploadGist_
- :: forall eff
- . EffFn3 (dom :: DOM | eff)
- String
- (EffFn1 (dom :: DOM | eff) String Unit)
- (EffFn1 (dom :: DOM | eff) String Unit)
- Unit
+ :: EffectFn3 String
+ (EffectFn1 String Unit)
+ (EffectFn1 String Unit)
+ Unit
-- | A wrapper for `uploadGist` which uses `ContT`.
-uploadGist :: forall eff. String -> ExceptT String (ContT Unit (Eff (dom :: DOM | eff))) String
-uploadGist content = ExceptT (ContT \k -> runEffFn3 uploadGist_ content (mkEffFn1 (k <<< Right)) (mkEffFn1 (k <<< Left)))
+uploadGist :: String -> ExceptT String (ContT Unit Effect) String
+uploadGist content = ExceptT (ContT \k -> runEffectFn3 uploadGist_ content (mkEffectFn1 (k <<< Right)) (mkEffectFn1 (k <<< Left)))
-- | Get a gist by its ID
foreign import getGistById_
- :: forall eff
- . EffFn3 (dom :: DOM | eff)
- String
- (EffFn1 (dom :: DOM | eff) GistInfo Unit)
- (EffFn1 (dom :: DOM | eff) String Unit)
- Unit
+ :: EffectFn3 String
+ (EffectFn1 GistInfo Unit)
+ (EffectFn1 String Unit)
+ Unit
-- | A wrapper for `getGistById` which uses `ContT`.
-getGistById :: forall eff. String -> ExceptT String (ContT Unit (Eff (dom :: DOM | eff))) GistInfo
-getGistById id_ = ExceptT (ContT \k -> runEffFn3 getGistById_ id_ (mkEffFn1 (k <<< Right)) (mkEffFn1 (k <<< Left)))
+getGistById :: String -> ExceptT String (ContT Unit Effect) GistInfo
+getGistById id_ = ExceptT (ContT \k -> runEffectFn3 getGistById_ id_ (mkEffectFn1 (k <<< Right)) (mkEffectFn1 (k <<< Left)))
foreign import tryLoadFileFromGist_
- :: forall eff
- . EffFn4 (dom :: DOM | eff)
- GistInfo
- String
- (EffFn1 (dom :: DOM | eff) String Unit)
- (EffFn1 (dom :: DOM | eff) String Unit)
- Unit
-
-tryLoadFileFromGist :: forall eff. GistInfo -> String -> ExceptT String (ContT Unit (Eff (dom :: DOM | eff))) String
-tryLoadFileFromGist gi filename = ExceptT (ContT \k -> runEffFn4 tryLoadFileFromGist_ gi filename (mkEffFn1 (k <<< Right)) (mkEffFn1 (k <<< Left)))
+ :: EffectFn4 GistInfo
+ String
+ (EffectFn1 String Unit)
+ (EffectFn1 String Unit)
+ Unit
+
+tryLoadFileFromGist :: GistInfo -> String -> ExceptT String (ContT Unit Effect) String
+tryLoadFileFromGist gi filename = ExceptT (ContT \k -> runEffectFn4 tryLoadFileFromGist_ gi filename (mkEffectFn1 (k <<< Right)) (mkEffectFn1 (k <<< Left)))
diff --git a/src/Try/QueryString.purs b/src/Try/QueryString.purs
index fbb66a4e..8009936a 100644
--- a/src/Try/QueryString.purs
+++ b/src/Try/QueryString.purs
@@ -7,49 +7,48 @@ module Try.QueryString
import Prelude
-import Control.Monad.Eff (Eff)
-import Control.Monad.Eff.Uncurried (EffFn1, runEffFn1)
-import DOM (DOM)
import Data.Array as Array
import Data.Maybe (Maybe(..))
import Data.Newtype (wrap)
-import Data.StrMap as StrMap
import Data.String as String
import Data.Tuple (Tuple(..))
-import Global (decodeURIComponent)
+import Effect (Effect)
+import Effect.Uncurried (EffectFn1, runEffectFn1)
+import Foreign.Object as Object
+import Global.Unsafe (unsafeDecodeURIComponent)
-foreign import getQueryString :: forall eff. Eff (dom :: DOM | eff) String
+foreign import getQueryString :: Effect String
-- | Get all of the URL's query parameters.
-getQueryParams :: forall eff. Eff (dom :: DOM | eff) (StrMap.StrMap String)
+getQueryParams :: Effect (Object.Object String)
getQueryParams = breakQueryString <$> getQueryString where
- breakQueryString :: String -> StrMap.StrMap String
+ breakQueryString :: String -> Object.Object String
breakQueryString =
String.drop 1
>>> String.split (wrap "&")
>>> map (String.split (wrap "=") >>> parseQueryTerm)
>>> Array.catMaybes
- >>> StrMap.fromFoldable
+ >>> Object.fromFoldable
parseQueryTerm :: Array String -> Maybe (Tuple String String)
- parseQueryTerm [k, v] = Just (Tuple k (decodeURIComponent (spaces v)))
+ parseQueryTerm [k, v] = Just (Tuple k (unsafeDecodeURIComponent (spaces v)))
parseQueryTerm _ = Nothing
spaces :: String -> String
spaces = String.replaceAll (wrap "+") (wrap " ")
-- | Try to get a key from the URL's query parameters.
-getQueryStringMaybe :: forall eff. String -> Eff (dom :: DOM | eff) (Maybe String)
-getQueryStringMaybe key = StrMap.lookup key <$> getQueryParams
+getQueryStringMaybe :: String -> Effect (Maybe String)
+getQueryStringMaybe key = Object.lookup key <$> getQueryParams
-- | Set the value of a query string parameter
-foreign import setQueryParameters :: forall eff. EffFn1 (dom :: DOM | eff) (StrMap.StrMap String) Unit
+foreign import setQueryParameters :: EffectFn1 (Object.Object String) Unit
-- | Update the specified key in the URL's query parameters.
-setQueryString :: forall eff. String -> String -> Eff (dom :: DOM | eff) Unit
-setQueryString k v = setQueryStrings (StrMap.singleton k v)
+setQueryString :: String -> String -> Effect Unit
+setQueryString k v = setQueryStrings (Object.singleton k v)
-setQueryStrings :: forall eff. StrMap.StrMap String -> Eff (dom :: DOM | eff) Unit
+setQueryStrings :: Object.Object String -> Effect Unit
setQueryStrings ss = do
params <- getQueryParams
- runEffFn1 setQueryParameters (StrMap.union ss params)
+ runEffectFn1 setQueryParameters (Object.union ss params)
diff --git a/src/Try/Session.purs b/src/Try/Session.purs
index 0b6d13f1..4eb56823 100644
--- a/src/Try/Session.purs
+++ b/src/Try/Session.purs
@@ -6,19 +6,18 @@ module Try.Session
import Prelude
-import Control.Monad.Eff (Eff)
-import Control.Monad.Eff.Random (RANDOM, randomInt)
-import Control.Monad.Eff.Uncurried (EffFn1, EffFn2, runEffFn1, runEffFn2)
-import DOM (DOM)
import Data.Functor.App (App(..))
import Data.Int (hexadecimal, toStringAs)
import Data.Maybe (Maybe(..))
import Data.Newtype (unwrap)
import Data.Nullable (Nullable, toMaybe)
import Data.String as String
+import Effect (Effect)
+import Effect.Random (randomInt)
+import Effect.Uncurried (EffectFn1, EffectFn2, runEffectFn1, runEffectFn2)
import Try.QueryString (getQueryStringMaybe, setQueryString)
-randomGuid :: forall eff. Eff (random :: RANDOM | eff) String
+randomGuid :: Effect String
randomGuid =
unwrap (App s4 <> App s4 <> pure "-" <>
App s4 <> pure "-" <>
@@ -30,35 +29,29 @@ randomGuid =
padLeft s = String.drop (String.length s - 1) ("000" <> s)
foreign import storeSession_
- :: forall eff
- . EffFn2 (dom :: DOM | eff)
- String
- { code :: String, backend :: String }
- Unit
+ :: EffectFn2 String
+ { code :: String, backend :: String }
+ Unit
-- | Store the current session state in local storage
storeSession
- :: forall eff
- . String
+ :: String
-> { code :: String, backend :: String }
- -> Eff (dom :: DOM | eff) Unit
-storeSession sessionId values = runEffFn2 storeSession_ sessionId values
+ -> Effect Unit
+storeSession sessionId values = runEffectFn2 storeSession_ sessionId values
foreign import tryRetrieveSession_
- :: forall eff
- . EffFn1 (dom :: DOM | eff)
- String
- (Nullable { code :: String, backend :: String })
+ :: EffectFn1 String
+ (Nullable { code :: String, backend :: String })
-- | Retrieve the session state from local storage
-tryRetrieveSession :: forall eff. String -> Eff (dom :: DOM | eff) (Maybe { code :: String, backend :: String })
-tryRetrieveSession sessionId = toMaybe <$> runEffFn1 tryRetrieveSession_ sessionId
+tryRetrieveSession :: String -> Effect (Maybe { code :: String, backend :: String })
+tryRetrieveSession sessionId = toMaybe <$> runEffectFn1 tryRetrieveSession_ sessionId
-- | Look up the session by ID, or create a new session ID.
createSessionIdIfNecessary
- :: forall eff
- . (String -> Eff (dom :: DOM, random :: RANDOM | eff) Unit)
- -> Eff (dom :: DOM, random :: RANDOM | eff) Unit
+ :: (String -> Effect Unit)
+ -> Effect Unit
createSessionIdIfNecessary k = do
sessionId <- getQueryStringMaybe "session"
case sessionId of