import React from "react"; import { FeatureItem } from "./feature-item"; export const ReadyFeatures: FeatureItem[] = [ { title: "A Static that feels like Dynamic", description: ( <> NeoHaskell's type system is so powerful that you'll forget it's there. With type inference, you'll spend less time annotating and more time coding in a language that feels dynamic. ), buttonText: "Start Coding", showcase: { language: "haskell", code: `verify = do joe <- getPerson "Joe" if joe.age > 18 then print "Joe is an adult" else print "Joe is a child"`, }, }, { title: "Lazy Evaluation for Eager Minds", description: ( <> NeoHaskell won't evaluate an expression until it's absolutely needed. This lets you create more efficient code and focus on what to compute rather than how to compute it. ), buttonText: "Get Lazy, Be Efficient", showcase: { language: "haskell", code: `let infiniteList = [1..] let doubledList = List.map (*2) infiniteList print (List.toString doubledLis)`, }, }, { title: "Fearless Concurrency", description: ( <>

Concurrency is not an afterthought in NeoHaskell; it's baked right in. Write concurrent code without the common pitfalls, and get more done, faster.


Functions like async and race make it easy to write concurrent code. And with concepts like Channels, you'll be able to write concurrent code without the headaches.

), buttonText: "Unlock Concurrency", showcase: { language: "haskell", code: `foo = do threadDelay 500 print "foo" bar = do threadDelay 1000 print "bar" -- will print "foo" and exit main = race foo bar`, }, }, { title: "Event Sourcing and CQRS Ready", description: ( <> NeoHaskell aligns well with modern architectural patterns like Event Sourcing and CQRS, making it easier for you to build scalable and maintainable systems. ), buttonText: "Build Modern Systems", showcase: { language: "haskell", code: `reduction = do myEvents <- getEvents "myAggregate" return ( Stream.reduce myReducer initialState myEvents )`, }, }, ];