明日プロダクションコードで使える無駄知識。
変数を1文字にする
基本ですね。
空白を入れない
なるべく隣接させる
- 各種記号
$ . + - * / : ++ !! |
- クォーテーションの類
'' "" `` () [] {}
- 数字の次
2in
改行しない
;で改行できます
型を書かない
型推論の恩恵に預かりましょう。
@を活用する
引数を同時に展開できます。
f a@(_,y)=y+g a
括弧の代わりに$を使う
基本ですね。
map f(g a)
map f$g a
カリー化
これも基本です。
f a=g a
f=g
もっとカリー化
ポイントフリーしていきましょう。
f a=g(h a)
f a=g.h a
f=g.h
何度も使う関数を別名にする
長い名前の関数ほど有効。
a=length
関数をpublicにする
whereの中に居る必要の無いものは外に出します。
mapよりもリスト内包表記
多くの場合、リスト内包表記の方が短くなります。
let-inよりもwhere
1文字分だけ稼げます。
f a=let x=g a in x
f a=x where x=g a
concatよりも>>=id
1文字分だけ稼げます。
concat["a","b"]
["a","b"]>>=id
1文字の結合にconsを使う
Stringは[Char]なので。
" "++a
' ':a
ガード節を使う
if-then-elseより短くなる。
ガード節は関数のトップレベルでも使用できる。
otherwiseの代わりにTrueが使える。
f a=if a>5 then 1 else 0
f a|a>5=1|True=0