並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 41件

新着順 人気順

OCamlの検索結果1 - 40 件 / 41件

  • 関数型プログラミングと型システムのメンタルモデル

    Qiita Conference 2023 Autumun での発表資料です 発表時間の見積もりが下手で後半全然説明できませんでした、すみません! 実際のプロダクト開発ではどうすればいいのか? というケースは以下のスライドを参照してください。 (本スライドは、こちらのプロダクト開発の経験をベースに基礎を再整理したものになります) https://speakerdeck.com/naoya/typescript-niyoru-graphql-batukuendokai-fa-75b3dab7-90a8-4169-a4dc-d1e7410b9dbd

      関数型プログラミングと型システムのメンタルモデル
    • ビジネスロジックを「型」で表現するOOPのための関数型DDD / Functional And Type-Safe DDD for OOP

      Object-Oriented Conference 2024で発表した資料です。 https://fortee.jp/oocon-2024/proposal/b31c9818-3cb8-4350-adfe-cbc839cdf829 ビジネスの専門知識(ドメイン)を中心に据えたドメイン駆動設計に代数的データ型などの関数型のパラダイムを加えたよりタイプセーフな関数型DDDを紹介します。 本セッションではドメインモデリングによって発見したモデルやビジネスロジックをソフトウェアに反映する際により型を重視した設計を加えます。 型で表現する範囲が広がることでビジネスロジックをより明確にコードで表現できるようになります。 さらには型で表現されているためコンパイルフェーズで気付けるミスが増え、ソフトウェアの品質向上にもつながります。 関数型の考えをいれるといってもただ単にHaskellなどに代表される関

        ビジネスロジックを「型」で表現するOOPのための関数型DDD / Functional And Type-Safe DDD for OOP
      • TypeScript 関数型スタイルでバックエンド開発のリアル

        TSKaigi 2024 のスライドです

          TypeScript 関数型スタイルでバックエンド開発のリアル
        • TypeScriptでどこまで「関数型プログラミング」するか ─ 「手続き Haskell」から考察する - 一休.com Developers Blog

          この記事は 一休.comのカレンダー | Advent Calendar 2023 - Qiita 10日目の記事です。 昨今は Web アプリケーション開発の世界でも、関数型プログラミングのエッセンスを取り入れるような機会が増えてきました。 とはいえ、一つのアプリケーションを 1 から 10 までがっちり関数型プログラミングで構成するというわけではなく、そのように書くこともあればそうでない従来からの手続き的スタイルで書くところもあるというのが現状で、どこまで関数型プログラミング的な手法を取り入れるかその塩梅もまちまちだと思います。まだ今はその過渡期という印象も受けます。 本稿ではこの辺りを少々考察してみたいと思います。 先日、Qiita Conference 2023 Autumn で以下のテーマで発表を行いました。 この発表では「関数型プログラミング最強!」という話をしたわけではなく、

            TypeScriptでどこまで「関数型プログラミング」するか ─ 「手続き Haskell」から考察する - 一休.com Developers Blog
          • エラーや非同期処理をより安全に扱うための TypeScript ライブラリ Effect-TS

            TypeScript の型システムを活用して、本番のアプリケーションにおける実用的な問題を解決することを目指しています。Effect-TS は、以下のような特徴を備えています。 並行性(concurrency):Fiber ベースの並行モデルにより、高いスケーラビリティと低レイテンシを実現 コンポーザビリティ(composability):小さく再利用可能なパーツを組み合わせることで、メンテナンス性、可読性、柔軟性の高いソフトウェアを構築する リソースの安全な管理(resource-safety):処理が失敗したとしても、安全にリソースを開放する 型安全性(type-safety):TypeScript の型システムを活用した型推論と型安全性に焦点を当てている エラー処理(error handling):構造化された信頼性の高い方法でエラーを処理する 非同期性(asynchronicity

              エラーや非同期処理をより安全に扱うための TypeScript ライブラリ Effect-TS
            • 【TypeScript】カリー化・部分適用は便利だよ! - Qiita

              【TypeScript】カリー化・部分適用は便利だよ! カリー化・部分適用利用してますか? 調べたけど「関数を第一級オブジェクトとしてー」とか「関数を部分適用してー」とか説明が講義っぽくて途中で諦めた方も多いと思います。自分もそうでした。 また、知ってるけどどんな時に使うべきか迷って使ってないという方もいると思います。 具体的なコードを交えながら、カリー化・部分適用について、噛み砕いて説明していきたいと思います。 なお、すべてのTypeScriptのサンプルコードは実際に動かして確認することができますので、TypeScript Playgroundなどで是非お試しください。 カリー化と部分適用 まずはカリー化と部分適用の定義をば。 カリー化 (currying, カリー化された=curried) とは、複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引

                【TypeScript】カリー化・部分適用は便利だよ! - Qiita
              • 私とテストと自動化と - あどけない話

                何度か講演でこの話をしたのだが、気が向いたのでエッセンスを書き下しておこうと思う。 テスト駆動という言葉が流行る前にプログラマとなった私は、当初どのようにテストを書いてよいのか分からなかった。そんなとき、(当時はオーム社で現在はラムダノートの)鹿野さんから「ビューティフルコード」を献本していただいた。分厚い本なので、興味ある章から読んでいった。その一つがアルベルト・サボイア氏が書いた7章「ビューティフル・テスト」だ。 ビューティフルコード (THEORY/IN/PRACTICE) 作者:Brian Kernighan,Jon Bentley,まつもとゆきひろオライリージャパンAmazon この章では、例として二分探索が取り上げられる。二分探索のアイディアが出されたのは1946年だが、バグのない実装ができたのは12年後だという。実際に実装してみると分かるが、ソートされた配列の中に目的の要素が

                  私とテストと自動化と - あどけない話
                • Optics: 「パス」に型を付ければ、データ全体に型を付ける必要はない - Lambdaカクテル

                  あまり知られていない関数型言語のおもしろ概念として、Opticsというものがある。 Opticsとは、オブジェクト指向言語で言うところのSetter/Getterを一種の関数として捉え、いくつかの便利な特性を付与したものの総称だ。この便利な特性によって、Setter/Getter以上のことをパワフルにこなせる。 最も有名なOpticsはLensであり、色々な解説資料が(主にHaskell向けに)出ている。 blog.recruit.co.jp さて、これまでのOpticsを紹介する資料はSetterとGetterとしての側面に注目しがちだったので、じゃあOpticsの何が良いのか、Scalaでやる意義は何か、という側面をこの記事で紹介しようと思う。 Optics -- vs. copyメソッド地獄 Opticsは合成可能である Opticsはボトムアップのアプローチである Opticsがう

                    Optics: 「パス」に型を付ければ、データ全体に型を付ける必要はない - Lambdaカクテル
                  • 抽象度の高い関数型言語プログラミングのスキルを身につけるための書籍が発売/「OCaml」を通じて関数型プログラミングを学べる『関数型言語で学ぶプログラミングの基本』【Book Watch/ニュース】

                      抽象度の高い関数型言語プログラミングのスキルを身につけるための書籍が発売/「OCaml」を通じて関数型プログラミングを学べる『関数型言語で学ぶプログラミングの基本』【Book Watch/ニュース】
                    • Lispとオブジェクトシステム

                      Lispとオブジェクト、オブジェクト指向システムを概観します。

                        Lispとオブジェクトシステム
                      • GitHub - marpple/FxTS: A functional programming library for TypeScript/JavaScript

                        You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

                          GitHub - marpple/FxTS: A functional programming library for TypeScript/JavaScript
                        • なっとく!関数型プログラミング を読んで関数型プログラミングを学んだ - Qiita

                          EDOCODEでエンジニアをしているYutakaです。 こちらは社内勉強会で発表した資料を元にしています。 関数型言語の知識がほとんどないエンジニアがなっとく!関数型プログラミングで学んだ用語を一部まとめました。原著はGrokking Functional Programmingです。本書はScalaとJavaで説明がされていますが、できる限り社内で使われている言語(Go, JavaScript, TypeScript)でサンプルコードを記載しました。 書籍のソースコードはこちらに全て公開されています。 そもそも関数型プログラミングとは? プログラミングのパラダイムには大きく①命令型プログラミング②宣言型プログラミングがあります。 ①命令型プログラミングとは どのよう(HOW)に計算するかに焦点を合わせ、段階的なアルゴリズムを詳細に定義します。これは実際のハードウェアの計算処理の流れに沿っ

                            なっとく!関数型プログラミング を読んで関数型プログラミングを学んだ - Qiita
                          • OCaml 製 ActivityPub サーバ Waq の紹介 - HackMD

                            今年に入ってからずっと、OCaml で ActivityPub サーバを書いています。名前は Waq(ワク)で、例によって GitHub で大公開しています。SNS に必要な最低限の機能は揃っていて、README に従うと Docker Compose でデモが動かせるので、よければ試してみてください。

                              OCaml 製 ActivityPub サーバ Waq の紹介 - HackMD
                            • 自作言語の紹介と関数型言語の実装方法の検討

                              はじめに 私が個人で昨年の 6 月ごろから開発している関数型プログラミング言語を紹介する。言語の名前は「Plato」である。 この言語は昨年の U22 プログラミングコンテスト最終発表会でも発表した。コンテスト後、コンパイラの構成と実装に関して調査し直して、コードを一から書き直した。コンパイラは Haskell で書かれているため、本稿の内容も Haskell の知識をベースとしている。また、型理論の知識もある程度求められる。ただ、大雑把に書いているため、大雑把に読めばよく、このブログの読解に正確さは必要無い。 このブログでは、まず Plato のチュートリアルを示し、実際に何ができるのかを説明する。次に型検査や中間言語の仕様などコンパイラの実装手法を大まかに説明する。最後に今後実現したい機能などについて述べる。理論的に面白いものや有用な機能については、後日それ専用の記事を書く予定。 チュ

                                自作言語の紹介と関数型言語の実装方法の検討
                              • Haskell の Array

                                Haskellのカレンダー | Advent Calendar 2023 - Qiita 3日目の記事です。 Haskell の Array (配列) について書こうと思います。Haskell の Array は索引が型クラスの Ix で抽象化されているため、特に配列の次元を拡張する際に柔軟性がありとても便利です。 そんな便利な Array ですが、もともと Haskell はリスト操作が強力ということもあってか、既存の参考書をみても Array の解説はほんの少しにとどまっているか、解説がないことがほとんどです。 Array が必要になる場面の多くは「リストだと !! によるインデックスアクセスで O(n) になってしまい間に合わない」という場面が多いと思います。しかし Haskell にはインデックスアクセスが O(1) の Vector (vector: Efficient Arra

                                  Haskell の Array
                                • F# ではじめる関数型プログラミング入門 (上巻)

                                  .NET ファミリーの関数型プログラミング言語である F# を利用した、全 3 巻構成の関数型プログラミング入門書籍となります。 上巻では F# の基本的な文法などの学習ができます。 なお、この書籍は本編をすべて無料で利用いただけますが、活動を応援いただける場合には最終チャプターをご購入いただけますと嬉しく思います。

                                    F# ではじめる関数型プログラミング入門 (上巻)
                                  • Eio 1.0 Release: Introducing a new Effects-Based I/O Library for OCaml

                                    Eio 1.0 Release: Introducing a new Effects-Based I/O Library for OCamlby Isabella Leandersson, Thomas Leonard, and Anil Madhavapeddy on Mar 20th, 2024 The OCaml 5 update brought much-anticipated support for programming on multiple cores. It also introduced support for concurrency via effect handlers – one of the first mainstream languages to do so. This significant update has had profound performa

                                      Eio 1.0 Release: Introducing a new Effects-Based I/O Library for OCaml
                                    • asyncを使わずに並行処理をやる方法はないのか - yhara.jp

                                      メモです。 What Color is Your Function? – journal.stuffwithstuff.com async/awaitを実装した言語では、asyncな関数とそうでない関数が区別される つまり、async funcを受け取るメソッドにnormal funcを渡すことはできない(逆もしかり) そのために、.mapと.mapAsyncみたいに各APIにasync版と非async版が必要になる https://blog.yoshuawuyts.com/announcing-the-keyword-generics-initiative/ keyword genericsという案 なぜasyncな関数と普通の関数は互換性がないのか async funcはステートマシンにコンパイルされるから (いやまあ別にそういう決まりはないけど、JS/Rust/C#はいずれもそうして

                                      • GitHub - panglesd/slipshow: An engine for displaying slips, the next-gen version of slides

                                        Slipshow is a tool specifically designed for technical presentations where traditional slides are not enough. In a slipshow presentation, the equivalent of a slide is called a slip. Each slip is like a slide, but with no bottom limit. That is, the content can be arbitrarily long! During the presentation, the camera will "scroll" down to reveal the hidden content, following a script given by the pr

                                          GitHub - panglesd/slipshow: An engine for displaying slips, the next-gen version of slides
                                        • 関数型プログラミングってなんなんだ?? - Qiita

                                          はじめに 普段はKotlinをメイン言語として扱っている筆者が、別のパラダイムの言語を勉強したいというモチベから、動的型付けかつ関数型プログラミング言語のElixirという言語を触ってみました。そこで学んだことをつらつらと書いていこうと思います。 その過程でパズドラ風味のコンソールアプリも作りました。分量的にこちらのコードの紹介はしないので、気になる方だけリポジトリをみてみてください。 有識者の方は、もしよければPR等でレビューをいただけるとめっちゃ嬉しいです💪 お手本のコードではないので、初心者の方は他の信頼できるソースコードを読んでみてください。 関数型プログラミングという言葉は知っているけれども、触ったことないし内容はよくわからないみたいな方に読んでほしいなと思います。 関数型プログラミングとは まずはwikipediaの概要から読んでいきます。 関数型プログラミングは、関数を主軸

                                            関数型プログラミングってなんなんだ?? - Qiita
                                          • Type Inference Was a Mistake

                                            Type inference is bad. It makes code harder to read, and languages that use it too much are harder to write. It’s a false economy whereby you save unobservable milliseconds of typing today and make everything else worse. Type Inference Makes Code Less Readable If you have an IDE with a working LSP, you can hover over variables to see their types. In VSCode with rust-analyzer I can see the type ann

                                            • Learn Lambda Calculus in 10 minutes with OCaml

                                              I'm going to teach you the basics of Lambda Calculus really quickly. Lambda Calculus is deep. But I'm covering only the fundamentals here. What is Lambda Calculus? Lambda Calculus (LC) is a model to describe computations. LC describes the syntax and semantics. Syntax A lambda expression (also known as lambda term) can be one of the following three things: Variable Application Abstraction Variable

                                                Learn Lambda Calculus in 10 minutes with OCaml
                                              • Compiling higher order functions with GADTs

                                                Implementing first class functions in a bytecode interpreter is trivial. But how do compilers that generate machine code (or lower to C, or SSA) implement higher order functions? Back in 2021, I found an answer when contributing closures to the Pallene compiler. Today I was researching something loosely related, and found yet another neat trick called defunctionalization in this paper. Defunctiona

                                                • GitHub - yawaramin/dream-html: Render HTML, SVG, MathML, htmx markup from your OCaml Dream backend server

                                                  You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

                                                    GitHub - yawaramin/dream-html: Render HTML, SVG, MathML, htmx markup from your OCaml Dream backend server
                                                  • 関数型言語で学ぶプログラミングの基本 | 電子書籍とプリントオンデマンド(POD) | NextPublishing(ネクストパブリッシング)

                                                    インプレス NextPublishing 関数型言語で学ぶプログラミングの基本 著者:川井 俊輝 抽象度の高いプログラミングのスキルを身につける! 関数型プログラミングへの関心が高まる中、多くのプログラミング言語がその核心的な概念を採用しています。この流れを受け、本書ではOCamlという関数型プログラミング言語を通じて、関数型プログラミングの基礎及びその応用について詳しく解説します。 OCamlは、その直感的な文法と高度な抽象化機能を備え、複雑なアプリケーションの開発に適しています。「OCamlとは何か?」「実際に使い物になるのか?」と疑問を持つかもしれませんが、OCamlの学習は関数型プログラミングの理解を深め、さまざまな言語でのプログラミングスキルの向上につながります。 OCamlで学ぶことにより、プログラミングの基本的な概念を習得し、他言語にも適用可能なプログラミング技術を手に入れる

                                                      関数型言語で学ぶプログラミングの基本 | 電子書籍とプリントオンデマンド(POD) | NextPublishing(ネクストパブリッシング)
                                                    • C#でエラー処理を実装するときにEither型を作ったら良い感じになった

                                                      要約 処理に失敗したことをメソッドの呼び出し元に通知するのに例外を使いたくなかった とはいえTupleでエラーオブジェクトを返すのもなんか取り回しが悪い そこで「2つの型のどちらかが設定されている」を保証するEither型を実装したらめちゃくちゃ書きやすくなった 背景 おそらくC#において「メソッドの処理が失敗した」ことを呼び出し元に通知する一番メジャーな方法は例外オブジェクトを投げる方法だと思います(標準ライブラリの多くがそうやってエラーを通知しています)。 しかし例外を投げるように実装すると、例外は分岐が見えにくく追いかけるのが面倒だし、呼び出し側でtry~catchをいちいち書くのが面倒だし、キャッチが漏れた例外がそのまま上に突き抜けたりとか、色々な問題を孕んでいます。 また、メソッドが例外を投げることがメソッドのシグネチャで表現されないので、あるメソッドを呼び出したときに例外をキャ

                                                        C#でエラー処理を実装するときにEither型を作ったら良い感じになった
                                                      • Improving the dead code elimination algorithm in js_of_ocaml - Micah Cantor

                                                        I'm looking for a full-time software engineering position starting in January 2024. If you or your team is hiring, please reach out! Introduction This summer I worked as a software engineer intern at Tarides from their Paris office. My project centered on improving the dead code elimination algorithm in the OCaml to JavaScript compiler, js_of_ocaml. In this post, I'll give some background on why t

                                                          Improving the dead code elimination algorithm in js_of_ocaml - Micah Cantor
                                                        • Getting OCaml Through the Eye of a Needle

                                                          I think OCaml is a great language. While it’s always too simplistic to put languages on a straight line, I feel it’s alright to say that it’s somewhere in between Java/C#/Go and Rust/Haskell for a couple of reasons: Immutability is the default, but you can use types that are mutable if you need/want to You can throw exceptions if you want, or play it “safe” with a Result type Concurrency can be ha

                                                            Getting OCaml Through the Eye of a Needle
                                                          • OCaml 5.1 と Eio で HTTPS クライアントを書く

                                                            Eio とは Eio は、OCaml 5.0 から導入された effect handler を用いた非同期処理ライブラリです。つい先日 1.0 がリリースされ、いまアツいです(筆者調べ)。 Eio では既存の Lwt や Async と異なり処理結果が Lwt.t などの型でラップされないため、bind(>>=)や ppx_lwt の let%lwt x = ... のような記法を用いずに(direct style で)コードを書くことができるという特徴があります。例えば単純な例として、5 秒まってから "Hello world!" と出力するようなコードは、Lwt では以下のように >>= を使って書く必要がありますが: open Lwt.Infix Lwt_main.run ( Lwt_unix.sleep 5.0 >>= fun () -> Lwt_io.printf "Hello

                                                              OCaml 5.1 と Eio で HTTPS クライアントを書く
                                                            • 7 OCaml Gotchas

                                                              I've been writing OCaml for about 1 year (check my previous post 8 months of OCaml after 8 years of Haskell). I enjoy OCaml. But as any other programming language, OCaml has its quirks. That's fine, you can enjoy imperfect things too. But it could be useful to learn about potential surprising behaviours. In this blog post, I'm highlighting 7 OCaml gotchas. Some of them might be obvious to experien

                                                                7 OCaml Gotchas
                                                              • What the interns have wrought, 2023 edition

                                                                We’re once again at the end of our internship season, and it’s my task to provide a few highlights of what the dev interns accomplished while they were here. The program was big! We had 152 software engineering interns, drawn from 58 schools across 19 different countries. And that’s not even counting the 31 tech interns in areas like production engineering, IT engineering, network engineering, and

                                                                  What the interns have wrought, 2023 edition
                                                                • 8 months of OCaml after 8 years of Haskell in production

                                                                  I've been using Haskell in production for 8 years. I've been using OCaml in production for 8 months. It's time to compare those two languages. Syntax Haskell probably has the most elegant syntax across all languages I've seen (maybe Idris is better because dependently typed code can become ugly in Haskell really quickly). There's utter joy in expressing your ideas by typing as few characters as po

                                                                    8 months of OCaml after 8 years of Haskell in production
                                                                  • MacoCaml: Staging Composable and Compilable Macros

                                                                    209 MacoCaml: Staging Composable and Compilable Macros NINGNING XIE, University of Toronto, Canada LEO WHITE, Jane Street Capital, UK OLIVIER NICOLE, Tarides, France JEREMY YALLOP, University of Cambridge, UK We introduce MacoCaml, a new design and implementation of compile-time code generation for the OCaml language. MacoCaml features a novel combination of macros with phase separation and quotat

                                                                    • me/007-My-Thoughts-on-OCaml-vs-Haskell-Rust-2023.md at master · sidkshatriya/me

                                                                      You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

                                                                        me/007-My-Thoughts-on-OCaml-vs-Haskell-Rust-2023.md at master · sidkshatriya/me
                                                                      • OCaml の補完とフォーマットをVSCode上で実現するための試行錯誤

                                                                        私は プログラミングの基礎や大学の講義資料でプログラミングを勉強しており、OCaml の開発者ではないもののサンプルコードとして OCaml を読んでいます。 この記事では、そういったコードリーディングを目的とした補完やフォーマットのための環境構築をしようとしてハマってしまっていたのでそれについてメモします。 (ビルド周りについては触れません) 筆者の環境は MacOS です。 とりあえず OCaml の環境を作る たまたま修理に出して新品になった Mac があるので、ここに環境を作っていきます。 まずは OCaml の package manager であるopamを入れます。 これはパッケージだけで無く OCaml 本体も入れられので、このコマンドを最初に使えるようにします。 インストール方法は公式であるHow to install opamにあるので、参照します。 > opam us

                                                                          OCaml の補完とフォーマットをVSCode上で実現するための試行錯誤
                                                                        • Melange 4.0 is here | Sandtracks

                                                                          Today, we're introducing Melange 4.0, the latest version of our backend for the OCaml compiler that emits JavaScript. Melange is now compatible with OCaml 5.2! In this release, Melange starts emitting more ES6 constructs, supports more JavaScript builtins, improves error handling, and makes using Dune virtual libraries fully supported. Read on for more details. Embracing OCaml 5.2 ​OCaml 5.2 was r

                                                                          • Playing with Caml Light on DOS | Frederic Cambus

                                                                            OCaml has been on my radar for some years now, and I think it was MirageOS which sparked my interest in the language. Lately, I started reading more about OCaml and its ecosystem, and indulged myself in an historical detour. For more background information on Caml and the Caml Light implementation in particular, please refer to "A History of Caml". Distribution archives for Caml Light are availabl

                                                                            • Getting started with ReasonReact and Melange

                                                                              A bit of background To quote the official docs: Melange is a backend for the OCaml compiler that emits JavaScript. Melange strives to provide the best integration with both the OCaml and JavaScript ecosystems. Basically, Melange lets you generate JS code from OCaml code. Reason (aka ReasonML) is an alternative syntax for OCaml that looks more like JS. Reason React are Reason bindings to React so t

                                                                                Getting started with ReasonReact and Melange
                                                                              • 関数型言語で学ぶプログラミングの基本 技術の泉シリーズ | 川井 俊輝 | 工学 | Kindleストア | Amazon

                                                                                • Making OCaml 5 Succeed for Developers and Organisations

                                                                                  Making OCaml 5 Succeed for Developers and Organisationsby KC Sivaramakrishan on Jul 7th, 2023 OCaml recently won the ACM SIGPLAN PL Software Award. The award recognises a software system that has had a significant impact on programming language implementation, research, and tools. It is especially notable that 4 out of the 14 named OCaml compiler developers are affiliated with Tarides: Anil, David

                                                                                    Making OCaml 5 Succeed for Developers and Organisations