The goal is to express an ADT like the following in json schema:
data Sum
= Foo { hi :: Int }
| Bar { x :: Bool }or in rust syntax:
| let | |
| list = | |
| rec { | |
| empty = { a = null; cons = null; }; | |
| singleton = x: { a = x; cons = null; }; | |
| cons = x: xs: { a = x; cons = xs; }; | |
| # O(n) | |
| foldr = f: zero: |
| {-# LANGUAGE LambdaCase #-} | |
| module Pretty | |
| ( -- * Pretty printing for error messages | |
| Err, | |
| printPretty, | |
| -- constructors hidden | |
| prettyErrs, | |
| message, | |
| messageString, |
| let | |
| pkgs = import <nixpkgs> {}; | |
| lib = pkgs.lib; | |
| allOptions = (import <nixpkgs/nixos> {}).options; | |
| # ** some helpers | |
| # Like mapAttrs, but if `null` is returned from the mapping function, | |
| # the element is removed from the attrset. | |
| # |
| {-# LANGUAGE AllowAmbiguousTypes #-} | |
| {-# LANGUAGE DataKinds #-} | |
| {-# LANGUAGE FlexibleContexts #-} | |
| {-# LANGUAGE FlexibleInstances #-} | |
| {-# LANGUAGE MultiParamTypeClasses #-} | |
| {-# LANGUAGE OverloadedLabels #-} | |
| {-# LANGUAGE PolyKinds #-} | |
| {-# LANGUAGE ScopedTypeVariables #-} | |
| {-# LANGUAGE TypeApplications #-} | |
| {-# LANGUAGE TypeFamilies #-} |
| # the github message format requires newlines to be escaped with the URL-style %0A | |
| # see https://github.com/actions/toolkit/issues/193#issuecomment-605394935 | |
| def escapeNewline: gsub("[\\n]"; "%0A"); | |
| # depending on the hlint message, we want to display the | |
| # headings and the bodies differently | |
| def prepareTitle: | |
| if .hint == "Unused LANGUAGE pragma" | |
| then { heading: "Unused LANGUAGE pragma: \(.from)" | |
| , suggestion: "" |
| function with --description 'import all arguments as nixpkgs args and put their /bin on PATH' | |
| set arg ( \ | |
| printf ' | |
| let pkgs = import <nixpkgs> {}; | |
| in pkgs.symlinkJoin { | |
| name = "extra-fish-path"; | |
| paths = with pkgs; [ %s ]; | |
| } | |
| ' \ | |
| "$argv" \ |
| module Main where | |
| import System.Random | |
| import Data.Ratio | |
| import Data.Bifunctor | |
| -- | Returns for a bunch of people you meet , with a chance of 1/200 for each person, whether any has Covid | |
| randomPeople200 :: (RandomGen gen) => Int -> gen -> (Bool, gen) | |
| randomPeople200 numberOfPeople = | |
| first anyHasCovid . runGeneratorNTimes numberOfPeople 0 (uniformR (1, 200::Int)) |
The goal is to express an ADT like the following in json schema:
data Sum
= Foo { hi :: Int }
| Bar { x :: Bool }or in rust syntax:
| {-# LANGUAGE TypeApplications, ExplicitForAll, ScopedTypeVariables, BinaryLiterals, NumericUnderscores, TupleSections, ExistentialQuantification, KindSignatures, DataKinds, MultiWayIf, TypeFamilies, ConstraintKinds, TypeOperators, DerivingStrategies, GeneralizedNewtypeDeriving, InstanceSigs, MultiParamTypeClasses, FlexibleInstances #-} | |
| module Main where | |
| import qualified Data.Bits as Bits | |
| import Data.Word | |
| import qualified Data.List as List | |
| import qualified Data.Text as Text | |
| import qualified Data.ByteString as Bytes | |
| import Data.ByteString (ByteString) |
| # HLint configuration file | |
| # https://github.com/ndmitchell/hlint | |
| # Run `hlint --default` to see the example configuration file. | |
| ########################## | |
| # Ignore some builtin hints | |
| # often functions are more readable with explicit arguments | |
| - ignore: { name: Eta reduce } |