Suppose I have two zettels, A and B:
A.md B.md
Then I link from B to A with something like, "[[A]] provides a good summary of topic blah".
I now have a graph like this:
| {-# language DataKinds, GADTs, DuplicateRecordFields, StandaloneDeriving #-} | |
| module Questions where | |
| import Data.Kind (Type) | |
| data Nat = Z | S Nat | |
| deriving Show | |
| data Vec :: Nat -> Type -> Type where | |
| Nil :: Vec 'Z a |
| {-# options_ghc -Wall -Werror #-} | |
| module Env where | |
| import Data.Maybe (fromMaybe) | |
| import qualified System.Environment | |
| data LogLevel = DEBUG | INFO | WARN | ERROR | |
| deriving (Show, Read) | |
| newtype Parser a = Parser { parse :: String -> IO a } |
| import Data.Semigroup (stimes) | |
| import qualified Data.List as List | |
| import Prelude hiding (words) | |
| data Layout a = Space | Content a | |
| deriving (Eq, Show) | |
| layout :: b -> (a -> b) -> Layout a -> b | |
| layout space f c = |
| {-# LANGUAGE TypeOperators #-} | |
| {-# LANGUAGE DataKinds #-} | |
| {-# LANGUAGE GADTs #-} | |
| {-# LANGUAGE ScopedTypeVariables #-} | |
| {-# LANGUAGE TypeApplications #-} | |
| {-# LANGUAGE KindSignatures #-} | |
| {-# LANGUAGE MultiParamTypeClasses #-} | |
| {-# LANGUAGE FunctionalDependencies #-} | |
| {-# LANGUAGE RankNTypes #-} | |
| {-# LANGUAGE ConstraintKinds #-} |
Suppose I have two zettels, A and B:
A.md B.md
Then I link from B to A with something like, "[[A]] provides a good summary of topic blah".
I now have a graph like this:
| --- a/cryptohash-sha1.cabal | |
| +++ b/cryptohash-sha1.cabal | |
| @@ -66,7 +66,7 @@ | |
| library | |
| default-language: Haskell2010 | |
| - build-depends: base >= 4.5 && < 4.15 | |
| + build-depends: base >= 4.5 && < 5 | |
| , bytestring >= 0.9.2 && < 0.11 | |
| {-# language GADTs, KindSignatures, StandaloneDeriving #-} | |
| module Json | |
| ( JsonType(..), SomeJsonType(..) | |
| , Segment(..) | |
| , prettySegment | |
| , Path(..) | |
| , append | |
| , prettyPath | |
| , JsonError(..) | |
| , typeOf |
| command { | |
| name = "ls", | |
| options = [ | |
| Flag{ name = "long", short = 'l' }, | |
| Flag{ name = "recursive", short = 'R', long = "recursive" }, | |
| Option{ name = "block-size", long = "block-size", type = Int, default = None }, | |
| Option{ | |
| name = "color", | |
| long = "color", |
| {- | Calculating injective renamings | |
| Say you have typing environment like [x : Int, y : Bool]. In your AST, | |
| variables are represented by natural numbers that index into the environment. | |
| So under this environment, `x` is represented by `0` and `y` is represented | |
| by `1`. During type checking, information about a variable can be found by | |
| indexing into that environment. Similarly, the environment of a | |
| closure can be compiled to array, with the variable lookup being compiled to | |
| array indexing. This approach is known as 'de bruijn indices'. |
| {-# language DataKinds, GADTs, ScopedTypeVariables #-} | |
| {-# language RankNTypes, TypeApplications #-} | |
| {-# language LambdaCase #-} | |
| {-# language ImplicitParams #-} | |
| module Server where | |
| import Data.Bifunctor (first) | |
| import Data.ByteString (ByteString) | |
| import Data.Proxy | |
| import Data.Serialize |