Нет времени объяснять, переходим сразу к делу.
Доказывать теоремы мы будем, используя интерактивные пруверы Isabelle или Lean 3. Примеры приводятся для каждого прувера, для решения задач же можно использовать любой из них.
namespace ADTs | |
/- | |
In the game we have two banks of a river: left and right, | |
and four characters: a wolf, a goat, a cabbage, and a farmer. | |
The farmer prevents abybody from eathing anything, otherweise | |
the wolf eats the goat, or the goat eats the cabbage. | |
The game starts with all the characters on the left bank and | |
the goal is to move everyone to the right bank safe and sound. | |
The farmer can carry a single other character at a time |
---------------- Базовое ---------------------- | |
type Число = Int | |
type Строка = Text | |
type Строчное = Show | |
type ИО = IO | |
type Сравнимое = Eq | |
type Упорядоченное = Ord | |
печатать :: Строчное значение => значение -> ИО () | |
печатать = print |
#!/usr/bin/env node | |
const { resolve, dirname } = require('path') | |
const pify = require('pify') | |
const { readFile, writeFile } = pify(require('fs')) | |
const debug = require('debug')('mst') | |
const Inquirer = require('inquirer') | |
const ProgressBar = require('progress') | |
const chalk = require('chalk') | |
const changeCase = require('change-case') | |
const semver = require('semver') |
Оригинальная заметка Матиаса Питера Йохансона, переведена с разрешения автора.
Меня часто спрашивают, что я думаю о Vue.
Не буду оценивать Vue, так как я недостаточно хорошо знаком с ней, но я очень хорошо знаком с шаблонизаторами. Собственная система шаблонов Vue вместо JSX во многих статьях преподносится как причина, по которой вы должны выбрать Vue. Из-за этого я на стену лезу от негодования, потому что негативные стороны этого подхода даже не удостаиваются упоминания или обсуждения. JSX существует по достаточно веским причинам. Для меня JSX — большой шаг к упрощению и улучшению шаблонов.
defmodule Result do | |
@type result :: any | |
@type reason :: any | |
@type ok :: {:ok, result} | |
@type error :: {:error, reason} | |
@type t :: ok | error | |
@spec ok(result) :: ok | |
def ok(result) do | |
{:ok, result} |
Приближается, пожалуй, самое значительное нововведение в хаскеле, со времен FC и превращения хаскеля из ML++ в недоΩmega: модули. Весь этот тектонический сдвиг, правда, остается незамеченным. Даже в Release notes об этом не упомянуто. Есть, только упоминание в руководстве пользователя Также, описания новой системы модулей можно найти на странице Backpack, но установить что из этого уже имплементировано можно только опытным путем.
Представление о ML-модулях можно составить из диссертации Дрейера (pdf)
var parser = document.createElement('a'); | |
parser.href = "http://example.com:3000/pathname/?search=test#hash"; | |
parser.protocol; // => "http:" | |
parser.hostname; // => "example.com" | |
parser.port; // => "3000" | |
parser.pathname; // => "/pathname/" | |
parser.search; // => "?search=test" | |
parser.hash; // => "#hash" | |
parser.host; // => "example.com:3000" |
(defn debounce [func wait immediate] | |
(let [timeout (atom nil)] | |
(fn [] | |
(this-as this | |
(let [context this | |
args js/arguments | |
later (fn [] | |
(reset! timeout nil) | |
(when-not immediate | |
(.apply func context args)))] |