# Standard ML

Standard ML (SML) is a programming language with formal definitions, including the 1997 revised definition.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Osprey: Open Sourcing our Rule Engine

DevFeed: [Osprey: Open Sourcing our Rule Engine](<https://devfeed.tech/articles/osprey-open-sourcing-our-rule-engine-272.md>)

Original publisher: [Read original article](<https://discord.com/blog/osprey-open-sourcing-our-rule-engine>)

Author: Discord Engineering

Published: 2026-02-19T00:00:00Z

Content type: article

Language: en

Sources: [Discord Blog](<https://devfeed.tech/sources/discord-blog.md>)

Topics: [Discord](<https://devfeed.tech/topics/discord.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [real-time](<https://devfeed.tech/topics/real-time.md>), [gRPC](<https://devfeed.tech/topics/grpc.md>), [Standard ML](<https://devfeed.tech/topics/standard-ml.md>)

Tags: [customers](<https://devfeed.tech/tags/customers.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [discord](<https://devfeed.tech/tags/discord.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [tool](<https://devfeed.tech/tags/tool.md>)

### AI overview

Discord introduces Osprey, an open-source safety rules engine developed with ROOST and the internet.dev team. It processes real-time platform activity through expressive SML rules, supports synchronous gRPC and asynchronous message-queue inputs, and produces transparent verdicts and investigation data.

### Source excerpt

Discord uses Osprey to quickly detect and remove new types of harm from putting our customers at risk. Now we're open-sourcing this tool so others can do the same.

## the algebra of dependent types

DevFeed: [the algebra of dependent types](<https://devfeed.tech/articles/the-algebra-of-dependent-types-36214.md>)

Original publisher: [Read original article](<https://dotat.at/@/2025-05-28-types.html>)

Published: 2025-05-29T00:07:51Z

Content type: article

Language: en

Sources: [Tony Finch's blog](<https://devfeed.tech/sources/tony-finch-s-blog.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Standard ML](<https://devfeed.tech/topics/standard-ml.md>), [Rust](<https://devfeed.tech/topics/rust.md>)

Tags: [algebra](<https://devfeed.tech/tags/algebra.md>), [enum](<https://devfeed.tech/tags/enum.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [languages](<https://devfeed.tech/tags/languages.md>), [programming-languages](<https://devfeed.tech/tags/programming-languages.md>), [type-system](<https://devfeed.tech/tags/type-system.md>), [type-theory](<https://devfeed.tech/tags/type-theory.md>), [types](<https://devfeed.tech/tags/types.md>)

### AI overview

An explanation of why big-sigma and big-pi notation appears in dependent type theory. It connects dependent functions and dependent pairs to algebraic data types, showing how products correspond to multiplication and sum types to addition, with examples from type theory, Standard ML, Haskell, and Rust.

### Source excerpt

TIL (or this week-ish I learned) why big-sigma and big-pi turn up in the notation of dependent type theory. I've long been aware of the zoo of more obscure Greek letters that turn up in papers about type system features of functional programming languages, μ, Λ, Π, Σ. Their meaning is usually clear from context but the reason for the choice of notation is usually not explained. I recently stumbled on an explanation for Π (dependent functions) and Σ (dependent pairs) which turn out to be nicer than I expected, and closely related to every-day algebraic data types. sizes of types The easiest way to understand algebraic data types is by counting the inhabitants of a type. For example: the unit type () has one inhabitant, (), and the number 1 is why it's called the unit type; the bool type hass two inhabitants, false and true. I have even seen these types called 1 and 2 (cruelly, without explanation) in occasional papers. product types Or pairs or (more generally) tuples or records. Usually written, (A, B) The pair contains an A and a B, so the number of possible values is the number of possible A values multiplied by the number of possible B values. So it is spelled in type theory (and in Standard ML) like, A * B sum types Or disjoint union, or variant record. Declared in Haskell like, data Either a b = Left a | Right b Or in Rust like, enum Either<A, B> { Left(A), Right(B), } A value of the type is either an A or a B, so the number of possible values is the number of A values plus the number of B values. So it is spelled in type theory like, A + B dependent pairs In a dependent pair, the type of the second element depends on the value of the first. The classic example is a slice, roughly, struct IntSlice { len: usize, elem: &[i64; len], } (This might look a bit circular, but the idea is that an array [i64; N] must be told how big it is - its size is an explicit part of its type - but an IntSlice knows its own size. The traditional dependent "vector" type is a sized li

## Categories as Types

DevFeed: [Categories as Types](<https://devfeed.tech/articles/categories-as-types-40316.md>)

Original publisher: [Read original article](<https://www.jeremykun.com/2013/05/04/categories-as-types/>)

Published: 2013-05-04T19:30:35Z

Content type: tutorial

Language: en

Sources: [Jeremy Kun](<https://devfeed.tech/sources/jeremy-kun.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Standard ML](<https://devfeed.tech/topics/standard-ml.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>)

Tags: [categories](<https://devfeed.tech/tags/categories.md>), [class](<https://devfeed.tech/tags/class.md>), [exception](<https://devfeed.tech/tags/exception.md>), [functions](<https://devfeed.tech/tags/functions.md>), [functor](<https://devfeed.tech/tags/functor.md>), [mathematics](<https://devfeed.tech/tags/mathematics.md>), [ml](<https://devfeed.tech/tags/ml.md>), [object](<https://devfeed.tech/tags/object.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [type](<https://devfeed.tech/tags/type.md>)

### AI overview

The post explains two ways to represent a category as an ML type: a tuple of functions and an ML functor. It discusses representing objects and morphisms with types, checking composability, and providing identity morphisms while noting which category-theory properties cannot be enforced directly.

### Source excerpt

In this post we'll get a quick look at two ways to define a category as a type in ML. The first way will be completely trivial: we'll just write it as a tuple of functions. The second will involve the terribly-named "functor" expression in ML, which allows one to give a bit more structure on data types. The reader unfamiliar with the ML programming language should consult our earlier primer.

## A Sample of Standard ML, the TreeSort Algorithm, and Monoids

DevFeed: [A Sample of Standard ML, the TreeSort Algorithm, and Monoids](<https://devfeed.tech/articles/a-sample-of-standard-ml-the-treesort-algorithm-and-monoids-40310.md>)

Original publisher: [Read original article](<https://www.jeremykun.com/2013/04/07/a-sample-of-standard-ml-and-the-treesort-algorithm/>)

Published: 2013-04-07T21:57:37Z

Content type: tutorial

Language: en

Sources: [Jeremy Kun](<https://devfeed.tech/sources/jeremy-kun.md>)

Topics: [Standard ML](<https://devfeed.tech/topics/standard-ml.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Category Theory](<https://devfeed.tech/topics/category-theory.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Polymorphism](<https://devfeed.tech/topics/polymorphism.md>)

Tags: [algorithms](<https://devfeed.tech/tags/algorithms.md>), [category-theory](<https://devfeed.tech/tags/category-theory.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [mathematics](<https://devfeed.tech/tags/mathematics.md>), [ml](<https://devfeed.tech/tags/ml.md>), [monoids](<https://devfeed.tech/tags/monoids.md>), [programming](<https://devfeed.tech/tags/programming.md>), [sorting](<https://devfeed.tech/tags/sorting.md>), [standard-ml](<https://devfeed.tech/tags/standard-ml.md>), [trees](<https://devfeed.tech/tags/trees.md>), [universal-properties](<https://devfeed.tech/tags/universal-properties.md>)

### AI overview

A tutorial introducing Standard ML through functional programming, category theory, and the TreeSort algorithm. It explains why ML is used for manually implementing category-theoretic ideas and highlights parametric polymorphism and type inference.

### Source excerpt

In this post we will assume the reader has a passing familiarity with some of the basic concepts of functional programming (the map, fold, and filter functions). We introduce these topics in our Racket primer, but the average reader will understand the majority of this primer without expertise in functional programming. Follow-ups to this post can be found in the Computational Category Theory section of the Main Content page. Preface: ML for Category Theory A few of my readers have been asking for more posts about functional languages and algorithms written in functional languages.