LoginSignup
5
2

More than 5 years have passed since last update.

最近やっと固まってきたコーディングスタイル #Haskell

Posted at

最近やっと自分のHaskellのコーディングスタイルが固まってきたので, 纏めておきたいと思います.

尚, 今回の記事は@YoshikuniJujoさんのこちらの記事
(Haskell - 個人的な(そして異端的な)コーディングスタイル)
の構成とサンプルコードを借用させて頂いています.
@YoshikuniJujoさん, ありがとうございます.

はじめに

色々試行錯誤した結果, 美しさと読みやすさを最優先することにしました.
書く時, またそれの修正時には多少手間がかかりますが, Vim等のエディタの機能を最大限利用して効率化を図ろうという方針です.
GHCのPreludeのソースと@YoshikuniJujoさんのソースに多分に影響を受けているかと思います.

字下げ

半角スペースを使います. また, インデントの文字数は可変です.
関数の型宣言はの::=と縦に揃え, =の後ろのスペースは2つ分空けます.

hello     :: String -> IO String
hello str =  do print str
                return str

以下のように, 改行前の文字に合わせます.
doの直後は改行をしません.

スペース

スペースに関しては, @YoshikuniJujoさんのこちらの記事
(Haskell - 個人的な(そして異端的な)コーディングスタイル)
と殆ど同じですが, 複数行にまたがる括弧のみ違います.

複数行にまたがる括弧では, 開き括弧とコンマが縦に並ぶように記述します.

list1 = [ item1
        , item2
        , item3
        , item4 ]

レコード構文でderivingがある場合は以下のようにします.

data Some = Some { slot1 = value1
                 , slot2 = value2
                 , slot3 = value3
                 } deriving (Show)

1行の幅

1行の幅は基本的に80文字までとします.
"どんな環境で見ても大体折り返し無く見れる"というのが個人的な理想なので, どんなに長くても100文字までには改行したいと思っています.
ただ, 字下げをスペース可変にしている関係で, 必然的に文字数が多くなる傾向にはあります.

演算子と改行

行内で改行が必要になった際は, 演算子が行頭に来るように改行しています(が, 可読性の向上のために行末に変更するかも知れません).

hello =  "Hello, hello, hello, hello, hello, hello, ..., "
         ++ "world!"

foo =  fun1
       . fun2
       . fun3
       $ fun4 x

bar =  monad1
       >>= monad2
       >>= monad3
       >>= monad4

baz =  fun
       <$> app1
       <*> app2
       <*> app3
       <*> app4

変数名

変数名はまだあまり綺麗に固まっていません.
スコープの狭い変数は, 3文字以下の略語(f, xs, ch, str等)を付けています.

演算子($)の連続

演算子($)が連続する場合は, 出来る限り全て演算子(.)に置換します.

f $ g $ h $ ... y $ z $ a

このような場合は, 以下のようにします.

(f . g . h . ... y . z) a

複数の関数をまとめて型宣言するとき

複数の関数の型宣言をまとめて行ったことはありません.
今後検討します.

where節

where節は以下のように記述します.

fun x = ...
        where y = ...
              z = ...

let-in式

基本的にlet-in式は使わないようにしています.
なるべくwhereを使います.

ワイルドカードを使う/使わない

ワイルドカードに関しては, @YoshikuniJujoさんのこちらの記事
(Haskell - 個人的な(そして異端的な)コーディングスタイル)
と同じです.

モジュールの導入

モジュールの導入に関しては, @YoshikuniJujoさんのこちらの記事
(Haskell - 個人的な(そして異端的な)コーディングスタイル)
と同じです.

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2