Ramdaにおける関数のあいだの等式

Ramdaにおける関数のあいだの等式

SN

5/26 01:56

Ramdaの関数どうしの関係に関するメモ。

趣味でRamdaのドキュメントを読みながら考えていたことをまとめることにしました。

学術的関心の意味でポイントフリーの書き方を目指します。



- まだ途中です

- 書きなぐりなので順番に秩序がないです

- テストしたわけではないので、正しい保証が(全く)ありません。すみません

- イコール記号(=)は数学としての等号を表します

- カリー化が必要かもしれません


R.eqProps = R.compose(R.eqBy, R.prop)

比較対象はオブジェクト{k:v}です。


R.equals = R.eqBy(R.identity)

identityの練習。


R.repeat = R.compose(R.times, R.always)

alwaysの練習。


R.gte = R.either(R.gt, R.equals)

R.lte = R.either(R.lt, R.equals)も


R.partition = R.juxt([R.filter, R.reject])

juxtの練習。applySpecやevolveとの違いに注意


R.reduce = R.compose(R.last, R.scan)

reduceは有名ですが、scanはどんな使い道があるんでしょうかねー


R.sort = R.compose(R.sortWith, R.of)

ofの練習ー


R.T = R.always(true)

R.F = R.always(false)なんかもありますね。


R.both = R.compose(R.allPass, R.pair)

R.either = R.compose(R.anyPass, R.pair)


R.prop = R.compose(R.map(R.head), R.props, R.of)

ここで、mapは関数を関数に写しています。


R.both = R.compose(R.map(R.apply(R.and)), R.juxt, R.pair)

うーん、書いているうちに自信なくなりました。後で確認しますかね

R.either = R.compose(R.map(R.apply(R.or)), R.juxt, R.pair)


R.sum = R.reduce(R.add, 0)

R.product = R.reduce(R.multiply, 1)


R.propEq = R.converge(R.compose, R.compose(R.equals, R.nthArg(1)), R.compose(R.prop, R.nthArg(0)))

ごついですね。convergeの汎用性に気づけたことが収穫。

もうすこしすっきりさせたいです


R.drop = R.chain(R.remove, R.identity)

chainの練習です。要するにモナドにおけるbindなんですけど、関数モナドに対する適用になっています。

アリティを、対角写像x => (x,x)のようにして1から2に延長できる方法があるといいんですけどねー

const withDiag = R.chain(R._ , R.identity)

のように補助的に関数作ると、

R.drop = withDiag(R.remove)

となって少しは見やすくなるでしょうか。

R.multiply(2) = withDiag(R.add)

R.converge = withDiag(R.useWith)←アリティ2の場合の等式

といった使い方ですかね


R.all(f) = R.reduce((acc, item) => R.and(acc, f(item)), true)

ポイントフリーにするにはどうしたら...!

R.any(f) = R.reduce((acc, item) => R.or(acc, f(item)), false)

Qiita - JavaScriptタグが付けられた新着投稿

本当にSSRする必要があるのか考えてみた話

SN

9/22 03:18



まえがき

今回タイトルにしたSSRというのは、Server Side Renderingのイニシャルで、広義にはテンプレートエンジンを用いてサーバーサイドでHTMLを生成する手法も含まれるとは思いますが、以下説明しているSSR...

FizzBuzzするものをKnockout.jsで作ってみた

SN

9/22 00:02



はじめに

フロントエンジニアとして働き始めて約半年経って、復習&自力でどこまで書けるのか掴むために、作ってみました。


書いたコード

HTMLのmain部分とJavascript部分だけ。


HTML
<main>
...

HTMLからAPIGatewayを呼出し、レスポンスを表示

SN

9/21 19:38

エヌシーアイ総合システムのmizu-ponです。

今回はHTMLからSDKを用いてAPIGatewayを呼出すまでの話です。


今回使用するAPIGawewayの仕様


APIGatewayのメニューからSDKをダウンロードできます。



適当なフ...

riotでjQueryを使わない複数行の三点リーダの実装

SN

9/21 19:21



背景

長い文字列は末尾を三点リーダに変換したい

例えばECサイトとかで商品が一覧で並んでいるときに、

長ーい商品名のアイテムだけ高さがずれたらダサい。

僕.「cssだけでできる?」

G .「IEは対...

Promiseでネストが深くなるのを防ぐための方法(やや黒魔術)(の提案)

SN

9/21 18:08



概要


Promiseは便利だが、うまくモデリングしないと(時にうまくモデリングされていても)、深いネストとアロー関数の海におぼれてしまうことがある
コンストラクタのresolveとrejectへの参照を保管しておく...

JavaScriptでクリーンアーキテクチャはどうすればいいのか(initializer編)

SN

9/21 15:23



initializerとは


クリーンアーキテクチャにおけるアプリの初期化部分


以下、持続可能な開発を目指す ~ ドメイン・ユースケース駆動(クリーンアーキテクチャ) + 単方向に制限した処理 + FRP より引用




...

Rails5/webpacker/ECMAScriptメモ

SN

9/21 12:22

rails5でwebpackerを使ったりviewに直接jsを書いたりしてます。どこでどの仕様までのjsを使っていいのかいつも迷うので纏めておくもの


ECMAScript


実装であるjavascriptに対し、言語仕様を指してECMAScriptと...

JavaScriptでクリーンアーキテクチャはどうすればいいのか(Presenter編)

SN

9/21 11:09



Presenterは?


View=Webページ(html)一歩手前の「Interface Adapter」


Viewを動的に書き換える 役割

つまり、引数の入力値を最終的にDOMへ


Viewへの操作は基本、idに紐付いたNodeListオブジェクト


idさ...

自分用: tscのtarget optionで排出されるClass形式纏め

SN

9/21 10:45



はじめに

npmパッケージで提供されたes6形式のclassをextendsした際にハマったのでこの辺を整理してみようと思う


ソースファイル

class Base {
}

class SubClass extends Base {
}



target es6 &&am...

始めよう React(基礎編)! Part 1 - React とは

SN

9/21 09:36

これからReactについて、書いていく予定です。

毎週1〜2回投稿する予定になります!

興味がある方是非ご覧下さい!

本章はReactの基礎を紹介して行きます。

よろしくお願いします。


Reactとは

...

Storyblokのdocs翻訳チャレンジその14!!!

SN

9/21 00:30



コンテンツデリバリAPI

コンテンツデリバリAPIはStoryblokのコンテンツにアクセスする最も簡単な方法です。

以下の言語について、コードのスニペットを容易しました。これを見ればどれほどシンプルかが分かる...

適当に継承

SN

9/21 00:29

適当に書いたAnimalクラスを継承して適当に移植したサンプル。


HSP
#runtime "hsp3cl"
#cmpopt varinit 1

#module Animal _name,virtualBark,isGrow
#define super(%1) \
_name=%1 :\
vir...

Storyblokのdocs翻訳チャレンジその13!!!

SN

9/20 23:56



データソースエントリ


複数のデータソースエントリを取得する


エンドポイント

GET /v1/cdn/datasource_entries



パラメータ




名前
説明




token(必須)
publishedだけ欲しければpublicトークン
d...

JAMstack - クライアントサイドJavaScript、再利用可能なAPI、予めビルドされたマークアップによるモダンなWeb開発アーキテクチャ

SN

9/20 23:35

JAMstackの概要を意訳しました。

誤りやより良い表現などがあればご指摘頂けると助かります。

原文: https://jamstack.org/



「スタック」について言及する際、OS、特定のWebサーバ、バックエンドのプロ...

JavaScript Tips: 数値・文字列を固定長にフォーマット

SN

9/20 22:20

固定長にフォーマットしたいことがある。例えばこんな感じ:

" hello"
" world!"


C言語では sprintf, python では string.format が使えるんだけど、JavaScript の場合は多分なくて、外部ライブラリを使...

1週間でNext.js とReact.jsでSPAを作って公開するまで

SN

9/20 22:12



作ったもの

日本人起業家のおすすめされている本は日本語で検索するとよく出てきますが、海外の方がおすすめされている本って日本語で検索してもあまりヒットしませんよね ....

そこで私が海外のサイトで...

Storyblokのdocs翻訳チャレンジその12!!!

SN

9/20 21:26



リンク


全てのリンクを取得


エンドポイント

GET /v1/cdn/links



パラメータ




名前
説明




token(必須)
publishedだけ欲しければpublicトークン
draftも欲しければprivateトークン


starts_with...

「Google Apps Script で始める RPA」のスライド公開します @ Google Cloud Next '18 in Tokyo

SN

9/20 21:03



Cloud Next '18 in Tokyo の概要


1 年に 1 度行われる Google 主催の大型イベント
2018/09/19, 20 の 2 日間で実施
Google Cloud の技術についてのセッション多数
1 万人以上が参加
ハッシュタグ: #GoogleNex...

TypeScript + PEG.jsでデータフロープログラミング専用のDSL言語AsyncFlowを作った

SN

9/20 19:20



概要

最近,自分でAsyncFlowというDSL(Domain Specific Language)を作りました.

https://github.com/kotauchisunsun/AsyncFlow

技術スタックとしては


Typescript v3.0.3
PEG.js v0.10.0
jest v23.5.0


...

二次元配列を一次元配列にする

SN

9/20 19:07

たとえば、[[1,2,3],[5, 6, 7]] という二次元配列があったとして、これを [1, 2, 3, 4, 5, 6, 7] というふうにひとつの配列にまとめたい場合、Array.reduce を使えば簡潔に書くことができる。

const arrayOfArra...

Storyblokのdocs翻訳チャレンジその11!!!

SN

9/20 18:44



ソース

https://www.storyblok.com/docs/Delivery-Api/Tags


タグ


全てのタグを取得


エンドポイント

GET /v1/cdn/tags



パラメータ




名前
説明




token(必須)
プライベートトークン


starts_wi...

Storyblokのdocs翻訳チャレンジその10!!!

SN

9/20 18:39



ソース

https://www.storyblok.com/docs/Delivery-Api/get-a-story


Stories

Storyblokで使われる殆どのエンドポイントは、低レイテンシと最適なアベイラビリティのために調整されています。

世界中で低い...

指定したパラメータの値を取得する

SN

9/20 18:02

指定したパラメータの値を取得するための関数。


script.js
function getParam(val) {
var p = location.search;
var v = '(?:(?:^|.*\s*)' + val + '\s*\=\s*([^&]*).*$)|^.*$';
return p.replace(ne...

react-native-web, react-primitivesで擬似擬似クラスを実装する

SN

9/20 17:24



はじめに

react-primitives, react-native-webを実務で使う機会があったのですが、そこでwebにおいてweb特有の挙動を再現するのにかなり手こずる箇所がありました。

そのひとつとして、擬似クラスの実装が...

JavaScriptによる右クリックの禁止・禁止を解除する方法

SN

9/20 17:13

Webサイトなどで手軽に右クリックをできないようにする方法と、逆に右クリックを禁止したページで右クリックできるようにする方法を書いていきたいと思います。


右クリックの禁止方法

右クリックされた時のイ...

Matter.jsを使って図形を飛ばす

SN

9/20 16:42

前々回の記事:「JavaScript用物理エンジン、Matter.jsをとりあえず動かす」

前回の記事:「Renderで生成されるcanvasにidをつけたい」

の続きです。

Matter.jsを動かすところまでできて、canvasにidをつ...

JavaScriptでクリーンアーキテクチャはどうすればいいのか(Usecase編)

SN

9/20 15:36



Usecaseもパイプの、とある実装(フィルタ)


以下のコードではrepositoryから得られたデータを直接Presenterに渡している


class usecase {
changeMonth(i, month){
this.filtercond = {month: i < 1...

レスポンシブ時代のイメージマップ(クリッカブルマップ)

SN

9/20 14:39

10年ぶりくらいにイメージマップを使用したのでメモ。


あれ、イメージマップってどうやって作るんだっけ…?

昔はDreamweaverとかでポチポチやってた気がしますが、今持ってないしどうしよう…。

と思ったら...

Prettier で整形した結果の diff があったときに CI を落とす方法

SN

9/20 13:38

よく使い回すのでメモ。

仕事上ほとんど CircleCI なので例は config.yml だけど、どこでも変わらない。


TL;DR

prettier の -l オプションを使う。以下のような package.json がある場合に……


package.j...

Go初学者が学んだことまとめ〜その2〜

SN

9/20 13:34



はじめに

こちらの続きです。

Go初学者が学んだことまとめ〜その1〜

今回は参照型についてです。


参照型


スライス


定義

可変長配列を表現する型。

下記のように定義できる。

var s []int


...

PR:bitflyer

bitFlyer ビットコインを始めるなら安心・安全な取引所で