aboutsummaryrefslogtreecommitdiff
path: root/src/components/HomepageFeatures/ready-features.tsx
blob: 5ccb6bfaf0e8232a4107f078fa01358691b5778b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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: (
      <>
        <p>
          Concurrency is not an afterthought in NeoHaskell; it's baked right in.
          Write concurrent code without the common pitfalls, and get more done,
          faster.
        </p>
        <br />
        <p>
          Functions like <code>async</code> and <code>race</code> make it easy
          to write concurrent code. And with concepts like Channels, you'll be
          able to write concurrent code without the headaches.
        </p>
      </>
    ),
    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
  )`,
    },
  },
];