タグ

プログラミングとHaskellに関するhamukichi_nbrのブックマーク (11)

  • Haskellの環境構築2023

    この記事はHaskell Advent Calendar 2022の1日目の記事です。 この記事では、2022年12月時点のHaskellの環境構築手順を紹介します。2023年になっても通用するといいなあ。 対象とする環境 対象とする環境は以下の通りです: Unix系 macOS (Intel / Apple Silicon) Linux (x86_64 / aarch64) WSL2を含む(WSL1は不具合があった気がするので避けてください) Windows (x64) Arm系CPU搭載のコンピューターを使っている場合は、別途LLVMが必要になる場合があります。以下に当てはまる場合は、「補遺:LLVMバックエンドを使う」も読んでください: 64ビットArm(Apple Silicon Macや、Raspberry Pi OSの64ビット版など)で、GHC 9.0またはそれ以前のバージョ

    Haskellの環境構築2023
  • Haskellの基本文法を学んだあとに読む記事 - Qiita

    はじめに この記事では、Haskellの基文法を身につけた皆さんに向けて、これから実用的なHaskellアプリを開発したり、既存のHaskellコードを読むにあたって役に立つ事柄を紹介します。 またこの記事を読むと、この記事で紹介していないものについても、混乱せずに自分で調べて学んでいけるように(たぶん)なります。 必ずしも頭から読む必要はなく、知りたいと思った節から読んでいくのが良いかと思います。 目安として、ウォークスルー Haskellを全て学んでいる相当の知識を前提とします。 目次 Readerモナド, Writerモナド, Stateモナドの簡単な解説 これらはIO, Maybe, List以外で特に重要なモナドです。 モナドを合成する手段であるモナドトランスフォーマーの説明もします。 Haskellの文字列事情の解説記事へのリンク Haskellの例外事情の解説記事へのリンク

    Haskellの基本文法を学んだあとに読む記事 - Qiita
  • Haskell入門

    Skip to the content. Haskell入門 従来の言語では問題を部分化する方法について概念的な限界がいくつかある。関数型言語はこれらの限界を押し広げるも のである。 なぜ関数プログラミングは重要か 関数プログラミングを習得するには,これまで命令プログラミングで培った技術はいったん忘れ,真っ白な気持ちで臨む必要があります。関数型の山を登るためには,命令型の山を降りなければなりません。 第1章 関数プログラミングは難しくない! Haskellは理解すれば理解するほどきれいに書けることを約束してくれます。信頼してください 常にパターンを探しましょう。単純になるとき、またその時だけそれらを抽象化するのです 辛抱強く抽象化を正しく理解しましょう。もしそれが出来たならすべてのことが魔法のようにつじつまが合うようになるでしょう。 実装そのものが設計図となります … Haskell Ma

  • Haskellの入門から中級者になるまでの指針 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? プログラミング言語の学習は一般に大変である。 最初にどのようなことをすればいいのか、どのをよむべきなのか等疑問は尽きない。マイナーな言語で情報が少なければなおさらである。 この記事では諸事情でHaskellに入門することになった方にむけて、どのように勉強していくか、参考にすべきや記事を紹介する。 より良い指針にするためにも、指摘、感想等はコメントや私のTwitterアカウント(@Lugendre)に投稿して頂けるとありがたい。 入門〜初心者 環境構築 まずどんなプログラミング言語においても、プログラミングをする環境が必要である。Ha

    Haskellの入門から中級者になるまでの指針 - Qiita
  • 発展編! Haskellで「型」のポテンシャルを最大限に引き出すには?【第二言語としてのHaskell】|ハイクラス転職・求人情報サイト AMBI(アンビ)

    発展編! Haskellで「型」のポテンシャルを最大限に引き出すには?【第二言語としてのHaskell】 第二言語としてHaskellを学習するシリーズ。発展編では、実践編で定義した型と関数をモジュールにする方法と、型を見直して関数をさらに安全なものにする方法を紹介します。さらに勉強したい方向けの超発展編付き! こんにちは。Haskell-jpの山悠滋(igrep)です。 Haskellらしいプログラミングとは何か? について、これまで基と実践を解説してきました。 実践編では、問題にあった型を自分で定義し、 その型を使った関数を定義していくというHaskellプログラミングの流れを、 トランプゲームのブラックジャックの手札の合計計算という例を使って学びました。 この記事ではさらに発展的なHaskellプログラミングの道を示すべく、次の2つの課題に取り組みます。 定義した型と関数をモジュ

    発展編! Haskellで「型」のポテンシャルを最大限に引き出すには?【第二言語としてのHaskell】|ハイクラス転職・求人情報サイト AMBI(アンビ)
  • 型クラスはインターフェースとどう違うのか | POSTD

    (注:2017/02/27、いただいたフィードバックを元に翻訳を修正いたしました。) Haskellの型クラスは、Haskellを学び始めたばかりの多くの人にとっては難しい概念です。たいていの言語はこれを表すことが全くできませんし、それに近い概念も持っていません。多くのオブジェクト指向型の言語にとっては、利用可能なものの中では Interface が最も近い言語要素でしょう。Rubyの modules は似たような役割を持っています。しかし、この概念は両方とも、名前の多重定義と一種のポリモーフィズムをアドレスするので、型クラスが提供するパワーの一部を欠いています。 この記事は、型クラスに興味を持っている人向けです。Haskellや関数型プログラミングの予備知識は必要ありません。JavaやC言語のような静的な型付き言語に慣れていれば、役に立つでしょう。 型クラスについての概要/要約 型クラス

  • 続・Haskellの最近の例外ハンドリング - syocy’s diary

    前回 の記事ではHaskellの例外ハンドリングには exceptions パッケージを使えばいいのではないかと書いた。 ところが今年の6月に safe-exceptions という exceptions を拡張したようなパッケージがさる FPComplete から 発表 された。 そこでこの記事では safe-exceptions について調べてみる。 おそらくほぼ FPComplete の発表の受け売りになってしまうので英語を読める人は原文を読む方がいいかもしれない。 さすが FPComplete だけあってこれは既に LTS Haskell に入っている。 この記事では lts-6.14 を用いる。 Haskellの例外のつらいところ 自分が認識している範囲ではHaskellの例外まわりは以下のところがつらい。 標準の例外系の関数が IO に特化されていて取り回しが悪い いかにも純粋

    続・Haskellの最近の例外ハンドリング - syocy’s diary
  • Parsecを初めて学ぶ - Qiita

    Haskell の世界を漂流していたら、Parsec というものにたどり着いたのですこし勉強してみた。 参考にしたサイトは、 https://wiki.haskell.org/Parsec http://book.realworldhaskell.org/read/using-parsec.html Parsecとコンビネータ Parsec lets you construct parsers by combining higher-order Combinators to create larger expressions. Parsec を使うと、コンビネータ(パーサを引数に取る)を組み合わせることでより大きく複雑なパーサを構成することができるということらしい。 ここで、コンビネータ(combinators)という言葉がよくわからなかったが、 https://wiki.haskell.

    Parsecを初めて学ぶ - Qiita
  • Haskell で高速なプログラムを書くときに注意すること | 雑記帳

    Haskell は表現力が高いプログラミング言語だが、気をつけないと非効率的なコードが生成されてしまうことがある。では、どういうところに気をつければ高速なコードになるのか。少し調べてみた。 この記事に書くのは、あくまで原則とかそういうやつなので、コンパイラーの最適化(正格性解析、インライン化、自動ボックス化解除)によっては、自前で工夫しても意味がない、つまり、コンパイラーに任せた場合と同じ結果になるかもしれない。どういう場合に早くなるかはケースバイケースなのだ。 ここで扱うトピックは大きく分けると、 正格評価 型クラスの特殊化 Unboxed 値 その他 となる。あくまで自分用の備忘録であり、特に突飛なことを書いているつもりはないので、知ってる人はアーハイハイという感じで読み飛ばしてしまえるだろう。また、筆者の理解が浅く、誤解に基づいたことを書いているかもしれないので、あまり信じすぎないよ

  • Haskell でのデバッグ - あどけない話

    「純粋関数型言語はデバッグしにくい。だって純粋な関数で printf デバッグできないから」とつぶやいている人をよく見かけます。これまで放置してきましたが、リツイートが50を超えたので、Haskellでのデバッグについて書きます。 例外処理と同じように、Haskell でのデバッグでは、純粋な関数と IO を分けて考える必要あります。 IO での printf デバッグ IO では、putStrLn や print が使えるから問題ないですよね? foo :: Int -> IO Bool foo i = do x <- あれして i putStrLn $ "x = " ++ show x これして putStrLn "ここも通過" -- それもする y <- それもする print y return y ちなみに、forkIO 起動した軽量スレッドから putStrLn する場合、軽量ス

    Haskell でのデバッグ - あどけない話
  • Haskell by Example

    Haskell is an advanced purely-functional programming language. Haskell by Example is a port of Go by Example to Haskell. Check out the first example or browse the full list below. Hello WorldValuesVariablesConstantsForIf/ElseSwitchArraysSlicesMapsRangeFunctionsMultiple Return ValuesVariadic FunctionsClosuresRecursionStructsMethodsInterfacesErrorsGoroutinesChannelsChannel BufferingChannel Synchroni

  • 1