LoginSignup
2
0

More than 3 years have passed since last update.

Haskellことはじめ 型について

Last updated at Posted at 2020-01-03

著書 Haskell ~教養としての関数型プログラミング~をテキストとして学んでいますがHaskellはガチで初学なので自分の解釈が異なっている場合があるかもしれません。

型を学ぶ

オブジェクト指向畑の住人からするとと言えばクラスを連想しますが、先入観をあまり持たずに進めていきます。

  • 型を調べる
# 文字Aの型を調べる
Prelude> :type 'A'
'A' :: Char

# 文字列TESTの型を調べる
Prelude> :type "TEST"
"TEST" :: [Char]

# 数値1の型を調べる
Prelude> :type 1
1 :: Num p => p
  • 型宣言
    構文:変数名::型 または 変数1, 変数2, 変数3 :: 型
    使用例
car :: String
price :: Integer
country, prefecture, city :: String
# カスタム演算子の型定義は括弧で囲む
(+*) :: Integer -> Integer -> Integer
  • 型セーフな関数定義
sample.hs
-- BMIを返す関数を定義

-- 型宣言
-- 身長と体重を引数にBMI値を返す
bmi :: Double -> Double -> Double
-- bmi = undefined
bmi = \h -> \w -> w / (h / 100) ^ 2

-- 身長、体重を引数に肥満かどうかを返す
isObese :: Double -> Double -> Bool
-- isObese = undefined
isObese = \h -> \w -> bmi h w >= 25

実行結果

*Main> bmi 172 60
20.281233098972418

*Main> bmi 172 59
19.94321254732288

*Main> bmi 172 70
23.661438615467823

*Main> bmi 172 80
27.041644131963228

*Main> isObese 172 70
False

*Main> isObese 172 80
True
  • モジュールの読み込み
    コンソールから
    構文:
    1つ目::module 名前空間.モジュール名
    2つ目以降::module + 名前空間.モジュール名

ソースファイルから

import 名前空間.モジュール名 (関数1, 関数2)
import qualified 名前空間.モジュール名 as エイリアス名

sample.hs
-- Maybe型の戻り値Just型またはNothing型から値を取り出す
import Data.Maybe (fromMaybe)

実行

# 第一引数はデフォルト値を指定
Prelude Data.Maybe> fromMaybe 0 (Just 8)
8
Prelude Data.Maybe> fromMaybe 0 Nothing
0

Data.Maybeリファレンス

2
0
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
2
0