【Haskell】llvm-hs-pureのサンプルコードで出るパターンマッチ排他警告を修正する

github.com llvm-hs-pureのREADMEに書いてあるこちらのコードですが、GHCのincomplete-uni-patternsオプションを有効にすると警告が出ます。 {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecursiveDo #-} import Data.Text.Lazy.IO as T import LLVM.P…

【Haskell】cabal runで表示される余計なメッセージを非表示にする

cabal runでHaskellプログラムを実行するとビルドの情報などが表示されますが、実行結果を標準出力として他のプログラムに渡したい場合はこれだと困ると思います。 例 ビルドが走った場合 $ echo 42 | cabal run kagla-hs Build profile: -w ghc-8.8.4 -O1 I…

【Haskell】cabal runでプログラムを実行する際に標準入力を渡す

プログラム module Main where main :: IO () main = do name <- getLine putStrLn $ "Hello, " ++ name ++ "!" 実行方法 $ echo Bob | cabal run greet これでOK。 ※greetはプログラム名

Tonbly開発日記 #2 -アーキテクチャやライブラリなどの紹介-

はじめに 絶賛開発停滞中のTonblyというQiitaクローン的なアプリについての記事第二弾。 github.com 前回の記事では開発の背景について記したが、今回はTonblyの構成について紹介する。 尚、文体が前回とまるで異なるのはキャラ付けを模索しているからだ。 …

Scrapboxの外部リンク記法でクリップボードにURLをコピーするブックマークレット

適当なページをブックマークした後にURLを以下のコードに置き換えればOK。 javascript:(()=>{const tmp = document.createElement('p');const pre = document.createElement('p');pre.style.userSelect = 'auto';tmp.appendChild(pre).textContent = '['+doc…

TOAST UIのMarkdownエディタのReact版にTypeScriptの型が付いたよ

TOAST UIというWebのUIツールキットにMarkdownエディタがあるのですが、これがかなり便利で、以前記事を書いたQiitaクローンで使っています。 ↓こんなエディタが簡単に作れます ただ、このエディタのReact版はTypeScriptの型定義がなかったので自分で型を付…

【参考になりません】Haskellの型クラスをScalaに移植する #1

モナドについて学ぶべくすごいH本を読んだので復習として型クラスをScalaに移植してみます。 www.ohmsha.co.jp 本と同じようにFunctor -> Applicative Functor -> Monadという順番で進めていこうと思います。 ちなみにScalaは趣味で少し書いたことがある程度…

Tonbly開発日記 #1 -開発の背景-

ハロー! 去年の12月くらいから作っているツールが多少形になってきたので開発日記をつけることにしました。 github.com どんなツールかというと、Qiitaもどきみたいなやつです。 UIは調整しますがこんな感じ ※テストデータはQiitaのAPIを使って放り込んでい…

Go言語でつくるインタプリタを読んだ

こちらの本を読んだので感想をば www.oreilly.co.jp ※Scalaに移植しました github.com 結論 言語自作に関する前提知識無しでインタプリタ実装を学べる良書 プログラミング言語を作ってみたいけど何から…という人には是非オススメ Goがわからなくても大丈夫 …

Alpine Linuxの破壊的変更でAsciiDocのGitLab CIがぶっ壊れた話

まとめ ある日突然、Dockerのasciidoctor/docker-asciidoctorを使ってAsciiDoc文書の変換と成果物(HTML)のアップロードを行っているGitLab CIのジョブが落ちるようになった 原因は、アップロードに使っていたftpputコマンドがAlpine Linuxのバージョン3.7か…

ScalaでArray(1, 2, 3, 1).groupBy(i =&gt; i)みたいに書いてる場合はidentityを使うと良い

// (1) これは... Array(1, 2, 3, 1).groupBy(i => i) // (2) こう書ける(意味は同じだけどスッキリ!) Array(1, 2, 3, 1).groupBy(identity) 最初は↓のように書いていたのですが、コンパイルが通らず、結局上記(1)のように書いていました。 Array(1, 2, 3, …