🕵️ SicherheitslückenHak5: Hackers Just Poisoned the Rust Supply Chain | Threat Wire(01.09.2026 um 14:00 Uhr)
🕵️ SicherheitslückenHak5: Hackers Found a Way Into Humanoid Robots | Threat Wire(04.09.2026 um 15:04 Uhr)
🔧 AI Nachrichten Bits und so #1021 (Passwort für Laufwerk)(31.08.2026 um 22:15 Uhr)
🔧 AI Nachrichten Bits und so #1022 (Wie Weißbier)(06.09.2026 um 20:39 Uhr)
🍏 iOS / Mac OSHue-App 6.0 ist da: das sind die Neuerungen(07.09.2026 um 17:21 Uhr)
🕵️ SicherheitslückenHak5: Hackers Just Poisoned the Rust Supply Chain | Threat Wire(01.09.2026 um 14:00 Uhr)
🕵️ SicherheitslückenHak5: Hackers Found a Way Into Humanoid Robots | Threat Wire(04.09.2026 um 15:04 Uhr)
🔧 AI Nachrichten Bits und so #1021 (Passwort für Laufwerk)(31.08.2026 um 22:15 Uhr)
🔧 AI Nachrichten Bits und so #1022 (Wie Weißbier)(06.09.2026 um 20:39 Uhr)
🍏 iOS / Mac OSHue-App 6.0 ist da: das sind die Neuerungen(07.09.2026 um 17:21 Uhr)

🔧 Programmierung 🕛 kürzlich 5 Min Lesezeit
0

Introduction to Haskell Diagrams

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

I need a solid declarative diagramming library or tool that I can invest time in. I always wanted to learn Haskell’s diagrams library. In this post, I will give it a try.






Motivation



I like drawing. Most people I know are visual people. I decided to find a decent diagramming tool which I can integrate in both my workflow and programs.



I can go two ways:




  1. Use a low-level language like , which are good for the purpose they are designed for, but not for generic purpose diagramming.



I think that I need something in between. Recently, I was checking Haskell library for a while. I know, it is quite low-level to use for occassional reasons, but high-level and generic enough to use in a program. It is time to give it a try.






Getting Our Hands Dirty



This blogpost is written in Literate Haskell. All the images produced in this post are generated by this post itself evertime I (or GitHub Action) build this blog. You can check the source code of my blog.



Let’s start…



I am simply going to add diagrams to my Haskell dependencies along with the markdown-unlit program.




CODE
{
##...

ghc = pkgs.haskellPackages.ghcWithPackages (hpkgs: [
## ...
hpkgs.diagrams
hpkgs.markdown-unlit
## ...
]);

thisShell = pkgs.mkShell {
buildInputs = [
## ...

ghc

## ...
];

NIX_GHC = "${ghc}/bin/ghc";
NIX_GHCPKG = "${ghc}/bin/ghc-pkg";
NIX_GHC_DOCDIR = "${ghc}/share/doc/ghc/html";
NIX_GHC_LIBDIR = "${ghc}/lib/ghc-9.6.5/lib";
};

# ...
}






diagrams tutorial says that we may need to enable some language extensions. But we will not need them in this port. We just need some imports:




CODE
import Diagrams.Backend.SVG
import Diagrams.Prelude
import System.Environment (getArgs)






We will generate 11 SVG diagrams in this tutorial. Let’s implement our entry point:




CODE
main :: IO ()
main = do
dir <- head <$> getArgs
render dir "diagram1.svg" diagram1
render dir "diagram2.svg" diagram2
render dir "diagram3.svg" diagram3
render dir "diagram4.svg" diagram4
render dir "diagram5.svg" diagram5
render dir "diagram6.svg" diagram6
render dir "diagram7.svg" diagram7
render dir "diagram8.svg" diagram8
render dir "diagram9.svg" diagram9
render dir "diagram10.svg" diagram10
render dir "diagram11.svg" diagram11
where
render dpath fname = renderSVG (dpath <> "/" <> fname) (mkSizeSpec2D (Just 400) Nothing) . frame 0.2






This is how we will invoke it:




CODE
runhaskell \
-pgmLmarkdown-unlit \
content/posts/2024-08-09_haskell-diagrams-intro.lhs \
static/assets/media/posts/haskell-diagrams-intro






Let’s start with a triangle:




CODE
diagram1 :: Diagram B
diagram1 =
triangle 1








How about putting a list of shapes side by side separated by a gap?




CODE
diagram3 :: Diagram B
diagram3 =
hsep 0.2 $
[ triangle 1
, triangle 1
]








It works for the shapes composed together as well:




CODE
diagram5 :: Diagram B
diagram5 =
showOrigin . hsep 0.2 $
[ triangle 1
, triangle 1
]








How about adding a vertical line between the triangles?




CODE
diagram7 :: Diagram B
diagram7 =
centerX . hsep 0.2 $
[ triangle 1
, vrule 1
, triangle 1
]








Of course! The origin along the y-axis is anchored to the first shape’s origin that is a triangle. And the center of this equilateral triangle is not the center of its height. See your nearest analytical geometry book for details!



Let’s align the shapes at to the top of the shapes:




CODE
diagram9 :: Diagram B
diagram9 =
centerX . (composeAligned alignT (hsep 0.2)) $
[ triangle 1
, vrule 1
, triangle 1
]








OK, now the final diagram attempt which will render some text inside the triangles:




CODE
diagram11 :: Diagram B
diagram11 =
hrule 1.4 === hcom
where
work = triangle 1 === scale 0.15 (alignedText 0.5 0 "work")
life = triangle 1 === scale 0.15 (alignedText 0.5 0 "life")
hcom = centerX . (composeAligned alignT (hsep 0.2)) $ [work, vrule 1, life]











Wrap-Up



In this tutorial, we glimpsed through the basics of the diagrams library.



Now that we have established work-life balance, I can get ready for the next chapter of my life with diagrams.

Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
1 Quelle
Hackers Just Poisoned the Rust Supply Chain | Threat Wire
1 Quelle
Hackers Found a Way Into Humanoid Robots | Threat Wire
1 Quelle
Bits und so #1021 (Passwort für Laufwerk)
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Introduction to Haskell Diagrams

Thematisch verwandte Begriffe: Introduction, Haskell, Diagrams · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...