Haskellにおいてモナドを使用したクラス定義を行う

Haskellにおけるモナドを定義すると、以下のようになります。 型構成子 m 連鎖 : m a -> (a -> m b) -> m b型の関数 をオペレーター>>=として定義する 注入 : a -> m a 型の関数 をreturn / pure で定義する ここで、a というのは任意の型で、これをいじるこ…

Haskell ">>="による副作用管理【Haskell モナド モナド則】

モナドのメリット モナドはHaskellのプログラムにおいて、特に入出力回りで活躍する仕組みです。 関数プログラムの本体から副作用を安全に分離することができ、計算戦略をプログラム全体にばら撒くことをせずに、一箇所にまとめることができます。 モナドの…

azurerm_cosmosdb_accountでCosmosDBをAzureに建てる【Azure Terraform】

CosmosDBとは? Azure CosmosDBとは Azure上で動くNoSQL データベース サービスです。 関連ページ コンソール画面を一切見ない、TerraformによるAzureの勉強 compute Terraformからazurerm_linux_virtual_machineを呼び出し、Linux仮想マシンをAzureで動かす…

Haskellにおいての合成についての解説

import Data.Char (toUpper) main :: IO () main = interact (map toUpper) Haskellにおいて interact と呼ばれる強力な関数があります。 この関数は 「標準入力からテキストをすべて読み込み ➔ 用意された関数にそのテキストを渡し ➔ 関数が返した結果を標…

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は関数型プログラミング言語に分類されますが、 関数型プログラミングは通常のプログラマーが持つ一般的な概念と比較して、ソフトウェアに対す…

トランザクションのACIDとそれを担保する仕組み

ACIDとは データベースにはACIDと呼ばれる特性があります。 ACIDはそれぞれ意味のある英語の文字列の先頭をとった単語であり、トランザクションに関連した単語です。 Atomic(原子性) トランザクションが分割不可能であることを意味します。 これは、トランザ…

データベースはどのように動作するのか

DBエンジニアの必須知識:Bツリー(B-Tree)の仕組みとCRUDの挙動を徹底解説 図解でわかる!データベースのファイル構造とストレージの仕組み トランザクションのACIDとそれを担保する仕組み 分離レベル page:https://minegishirei.hatenablog.com/entry/202…

図解でわかる!データベースのファイル構造とストレージの仕組み

ファイル構造 データベースのファイル構造は以下のように構成されている。 ヘッダ : ページの先頭部分に位置しそのページ自体に関する「メタ情報」を格納しています。 ファイル内での位置。 空き容量情報: あとどれくらいデータを書き込めるか。 フラグ: イ…

DBエンジニアの必須知識:Bツリー(B-Tree)の仕組みとCRUDの挙動を徹底解説

Bツリーはデータベースを支える最もメジャーなストレージ構造です。 PostgreSQL/MySQLのインデックスを支える技術として使われています。 (Bツリーがテーブルの裏側として使われることもなくはないですが、インデックスのみでの採用が多いです。) 以下はBツ…

PL/SQLでコンソール出力を行う方法

PL/SQLでコンソール出力を行う方法 PL/SQLでプログラムの結果を画面に表示するには、DBMS_OUTPUT.PUT_LINE ツールを使用します。 1. 基本的な書き方(匿名ブロック) 通常、PL/SQLは BEGIN ~ END; のブロック内に記述します。 SET SERVEROUTPUT ON BEGIN DBM…

【入門】Oracle PL/SQLの基本と書き方:サンプルコードで学ぶ制御構造

【入門】Oracle PL/SQLの基本と書き方:サンプルコードで学ぶ制御構造 Oracleデータベースの操作をより柔軟に、強力にするのがPL/SQLです。 SQLに「手続き型プログラミング(条件分岐やループ)」の要素を組み合わせたPL/SQLは、複雑なデータ処理を一括で行…

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