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 } |