Haskell アプリカティブファンクターの学習

アプリカティブファンクター ファンクターの関数適用 アプリカティブファンクターの前にファンクターの関数適用について。 今まではfmap (*2) [1,2,3]のように引数に値を返す関数(*2)を定義していた。 これを let a = fmap (*) [1,2,3] ghci> :t a a :: Num …

Scala 式結果の変数代入と関数オブジェクトについての学習

変数の遅延評価 lazyキーワードを使用するとその変数にアクセスするまで評価が遅延する。 scala> val date = new java.util.Date date: java.util.Date = Wed May 06 18:59:57 JST 2020 scala> lazy val date = new java.util.Date date: java.util.Date = <lazy> </lazy>…

Haskell RandomパッケージとbyteStringの学習

Randomパッケージのインストール 多分、--libをつけないとexecutableじゃないと怒られる。 $ brew install cabal-install $ cabal update $ cabal install --lib random random関数 random関数はジェネレーターgを受け取り、乱数aとジェネレーターgを返す。 …

Haskell ファイル入出力の学習

ファイルを読む readfile.hs import Control.Monad import Data.Char main = forever $ do l <- getLine putStrLn $ map toUpper l $ ghc --make readfile.hs $ ./readfile < data.txt getContents関数 入力ストリームから文字列を得る関数。入力ストリーム…

Haskell IOアクション入出力の学習

IOアクション IOアクションは実行されると副作用を含む動作を行い結果を返す。結果に返すべきものがない場合、()空のタプル、Unitを返す。 ghci> :t putStrLn putStrLn :: String -> IO () ghci> :t putStrLn "Hello World" putStrLn "Hello World" :: IO ()…

Haskell クラス型とFunctor型クラスを学習する

クラス型 classキーワードを使用して定義する。EqやOrdはクラス型となり、データ型はクラス型を指定することでクラス型のインスタンスとして振舞うことができる。 クラス型はオブジェクト指向言語でいうところのインターフェースのように、インスタンスが持…

Haskell データ型の定義を学習する

データ型を定義する dataキーワードで定義する。 data MyBool = False | True MyBoolというデータ型はTrueまたはFalseの値コンストラクタを受け取る。型名及び、値コンストラクタは大文字から始まる必要がある。 値コンストラクタには引数を与えることができ…