Нет времени объяснять, переходим сразу к делу.
Доказывать теоремы мы будем, используя интерактивные пруверы 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)))] |