2026-05-26から1日間の記事一覧

Haskellの未実行IOアクションの格納について

未実行IOアクションが理解できるサンプルコード Haskellにおいての未実行IOアクションを理解しようとするとき、以下のコードをみてください。 import System.Random main :: IO () main = do -- 1. 乱数を生成する「アクション(計算式)」を代入 let test =…

オブジェクト指向の限界

コードは書かれるよりも読まれる時間が長い プログラミング言語は一度書いたら終わりではなく、他のエンジニアが読みます。 (あるいは、そのコードを読むのは一月後のあなたかもしれません) その時に、「どこから読んだらいいかわからない」「追いかけるス…

Haskell勉強ノート

Haskell 概要 Dockerを使用したHaskellの環境構築手順 Haskell, Docker, docker-compose Haskellは関数型プログラミング ghc ghci runghc Haskell 文法基礎 Haskellでの四則演算 Haskellの変数と型一覧 Haskellのlet whereの使い方 Haskell let where 変数宣…

Haskellの圏論における準同型性

定義 準同型写像(homomorphism)とは、 「代数的な構造を保ったまま、ある構造から別の構造へ移す写像」のことです。 つまり、「元の世界での計算の仕方」が「移った先の世界」でも矛盾なく成り立つようにする写像です。 群 (G,⋅) と群 (H,∗) の間の写像 f:…

圏論における恒等写像

id関数 Haskellにはid関数と呼ばれる特別な関数があります。 この関数の動作内容はとてもシンプルで、「受け取った内容を、そのまま返す」といった内容です。 :t id id :: a -> a 恒等写像 一見意味がない関数に見えますが、このid関数は数学的な視点だと「…

データベースの使用例 -- file: ch22/PodDB.hs module PodDB where import Database.HDBC import Database.HDBC.Sqlite3 import PodTypes import Control.Monad(when) import Data.List(sort) -- | ファイルパスからコネクションを作成する。 -- | その際に…

HaskellにおけるDB操作

sqliteを扱うHaskellのデータベースライブラリはいくつかあるが、最も簡単なライブラリがsqlite-simpleである。 インストール方法はcabalであれば以下の通り。(自分は--libをつけなければインストールできなかった) cabal install --lib sqlite-simple {-#…

Haskellにおけるファイル入出力

ファイル読み込み ReadModeによるファイル読み込み Haskellにおいてのファイル読み込みはopenFile関数を使用します。 子の関数を使用するためには、System.IOを事前にimportしておく必要があります。 以下のサンプルコードでは、input.txtファイルを読み取り…

Haskellにおける標準入力と標準出力

ほとんどのプログラミングでは副作用は必要不可欠です。 Haskellの世界では純粋なコードの副作用から完全に分離されます。 Haskellの関数に副作用がある場合、IOのマークが付与されます。 標準入力と標準出力 Haskellにおける標準入力はgetLine関数を使用し…

listを扱うHaskellの関数

listを扱うHaskellの関数 head関数 head関数はリストの最初の要素を返します。 ghci> head [2,4,6,8] 2 tail関数 tail関数は先頭を除く全ての要素を含むリストを返します。 いわば、head関数の逆です。 ghci> tail [2,4,6,8] [4,6,8] 仮に返却される要素が一…

Haskellは数学【Haskell, 関数型プログラミング】

Haskellの真骨頂は関数型プログラミングにあります。 関数型プログラミングについては以下の記事で解説していると思いますので、 今回はHaskellの関数の文法についてお話します。 Haskellの関数の文法 Haskellの関数の構文は非常にシンプルです。 -- 関数の…

Haskellのclassによる型制約【Haskell class data】

classキーワード 型クラスの定義 Haskellでは等号、非等号を表すためにEqというクラスを使用しています。 class Eq a where (==), (/=) :: a -> a -> Bool x == y = not (x /= y) x /= y = not (x == y) 上記のEqクラスから以下の情報が読み取れます。 等号…

Haskell dataで型を作成する【Haskell data 型作成】

Haskellのdataについて Haskellのdata コマンドは既存の型を組み合わせて新しい型を作ることが出来ます。 data Animal = Cat Int scream :: Animal -> String scream (Cat number ) = concat (replicate number "ニャー") main = print $ scream(Cat 2) 上記…

Haskellにおける条件式

Haskellにおける条件式 Haskellにおいて、条件文という言葉よりも「条件式」といったほうが適切かもしれません。 条件文という言葉は手続き型言語やオブジェクト指向型言語では使われますが、Haskellにおいては「関数」が第一級オブジェクトとして扱われます…

Haskellにおける変数の概要

Haskellにおける変数の概要 Haskellにおいて、変数とは式に名前をつける手段です。 Haskellでは一度変数が特定の値に結び付けられたら、再度代入することはできません。 例えば、以下のコードはHaskellではエラーになります。 main = do let me = "私" me = …

Haskellの型システムの特徴

Haskellは関数型プログラミングであるが故、手続き型プログラミングでよくみられる「変数を複数宣言してそれらを管理する」手法は一般的ではありません。 しかし、Haskell言語の中にも型と変数の仕組み自体は存在し、特に型の考え方は重要になります。 この…

Haskellでの四則演算【Haskell, 四則演算, Bool】

単純な四則演算 Haskellでもほかの言語同様、四則演算をサポートしています。ghciと入力して対話型Haskellインタプリタを起動し、以下のコードを入力してみましょう。 ghci> 3+2 -- 5が出力される ghci> 3-2 -- 1が出力される ghci> 3*3 -- 9が出力される gh…

ghciのオプション一覧

ghciのオプション一覧 :infoコマンド haskellの:infoコマンドは、第一引数に入力された値の情報を表示することが出来ます。 調べる対象に制限はなく、ほぼすべての情報がinfoから取得可能です。 例えば、クラスを入力すればそのクラスメソッドの一覧が表示さ…

Haskellによるプログラム実行方法3パターン【Haskell, ghc, ghci, runghc, Helloworld!】

Haskellのコンパイラ HaskellのメインのコンパイラはGHCと呼ばれます GHCは(Glasgow Haskell Compiler)の略です。 名前の由来 : Glasgowは大学の名前で、グラスゴー大学で作られたことに由来しています。 言語 : コンパイラ自体もHaskellで書かれているが、…

Dockerを使用したHaskellの環境構築手順【Haskell, Docker, docker-compose】

Dockerを使用したHaskellの環境構築手順について HaskellはWindowsやMacの上に構築することも可能ですが、Dockerコンテナの上で実行することで完全な再現性が得られます。 加えてHaskell自体にもバージョンが存在するため、それらを容易に切り替えるとなおよ…

関数型プログラミングとは何か?【Haskell, 写像, 関数, 副作用】

Haskell はおそらく、これまでに使用したどの言語ともかなり異なります。 Haskellは関数型プログラミング Haskellは関数型プログラミング言語に分類されますが、 関数型プログラミングは通常のプログラマーが持つ一般的な概念と比較して、ソフトウェアに対す…

ソフトウェアエンジニアリング 学習ログ

ソフトウェアエンジニアリング 学習ログ とは このサイトはとあるソフトウェアエンジニア/SREがIT業界を生き残るために学び続けた学習ログです。 私は デスクトップエンジニアからWEB系(バックエンド/フロントエンド)を経由しSRE として活動してきました。 …

Dear My Frends.: 個人開発宣伝ラボ - 個人開発者が間違った施策で時間を溶かさないための、心理学と実務知見のナレッジ共有コミュニティ