<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/nominal-types-in-webassembly-wingolog-azt5sqymd" -->

---
title: nominal types in webassembly — wingolog | daily.dev
description: WebAssembly's managed data types use structural (isorecursive) type equality, where two structurally identical types in different rec groups are considered...
canonical: https://daily.dev/posts/nominal-types-in-webassembly-wingolog-azt5sqymd
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: nominal types in webassembly — wingolog | daily.dev
og:description: WebAssembly's managed data types use structural (isorecursive) type equality, where two structurally identical types in different rec groups are considered...
og:url: https://daily.dev/posts/nominal-types-in-webassembly-wingolog-azt5sqymd
og:image: https://api.daily.dev/og/posts/AzT5SQYMd.png
og:image:alt: nominal types in webassembly — wingolog
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# nominal types in webassembly — wingolog

**[Lobsters](https://daily.dev/sources/lobsters)** · 5 min read · 0 upvotes · 0 comments

## Summary

WebAssembly's managed data types use structural (isorecursive) type equality, where two structurally identical types in different rec groups are considered equivalent. True nominal typing—where each type declaration is unique—isn't directly supported, but the exception-handling proposal inadvertently provides it via 'tag' declarations. Tags behave like nominally-typed structs: construction uses 'throw', type-checking uses catch handlers, and field access is done via catch. Tags can be exported/imported between modules for principled composition. The post is framed as a troll, highlighting that the WebAssembly committee debated type imports for 7 years and effectively shipped a limited version through the exception-handling proposal. The author updated the Hoot Scheme-to-Wasm compiler to use the newer exception handling spec and is working on exception support in the Wastrel toolchain.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://wingolog.org/archives/2026/03/10/nominal-types-in-webassembly>

## Similar posts on daily.dev

- [Webassembly is here](https://daily.dev/posts/webassembly-is-here-5bakrrggx) · Quartex Pascal · 32 upvotes · 1 comments
- [A new chapter for the Nix language, courtesy of WebAssembly](https://daily.dev/posts/a-new-chapter-for-the-nix-language-courtesy-of-webassembly-a613el2y3) · Lobsters · 1 upvotes · 0 comments
- ["Five-Point Haskell": Total Depravity \(and Defensive Typing\)](https://daily.dev/posts/five-point-haskell-total-depravity-and-defensive-typing--xwwoyitrt) · Planet Haskell · 0 upvotes · 0 comments

---

Tags: [#webassembly](https://daily.dev/tags/webassembly), [#type-systems](https://daily.dev/tags/type-systems)

[View this post on daily.dev](https://daily.dev/posts/nominal-types-in-webassembly-wingolog-azt5sqymd)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"nominal types in webassembly — wingolog","url":"https://daily.dev/posts/nominal-types-in-webassembly-wingolog-azt5sqymd","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/nominal-types-in-webassembly-wingolog-azt5sqymd"},"datePublished":"2026-03-10T22:33:42.702Z","dateModified":"2026-03-10T22:34:10.479Z","description":"WebAssembly's managed data types use structural (isorecursive) type equality, where two structurally identical types in different rec groups are considered...","image":"https://media.daily.dev/image/upload/s--1KxV4ohY--/f_auto/v1722860400/public/Placeholder%2007","thumbnailUrl":"https://media.daily.dev/image/upload/s--1KxV4ohY--/f_auto/v1722860400/public/Placeholder%2007","isAccessibleForFree":true,"articleSection":"Lobsters","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Lobsters","logo":"https://media.daily.dev/image/upload/s--tl8v_Fku--/f_auto,t_logo/v1698841318/logos/lobste.jpg","url":"https://daily.dev/sources/lobsters"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/nominal-types-in-webassembly-wingolog-azt5sqymd","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"webassembly,type-systems","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Lobsters","item":"https://daily.dev/sources/lobsters"},{"@type":"ListItem","position":3,"name":"nominal types in webassembly — wingolog"}]}
```

