When buying an SSL certificate from Namecheap, you generate a CSR, which generates a private key, save that for later as private.key.
After you've paid for your certificate, you recieve a zip file that looks like this:
$ ls -alh
total 52K
| FROM ubuntu:20.04 | |
| RUN apt-get update -y | |
| RUN apt-get install -y python pip | |
| COPY . /home/chris/Work/alphacephei/vosk-server | |
| WORKDIR /home/chris/Work/alphacephei/vosk-server | |
| RUN pip install -r requirements.txt && pip3 install sounddevice | |
| RUN apt-get install -y libportaudio2 |
| import System.Posix.Signals | |
| main = do | |
| mainId <- RIO.myThreadId | |
| _ <- | |
| installHandler | |
| softwareTermination | |
| (CatchOnce | |
| (do S8.putStrLn "Received SIGTERM. Killing main thread." | |
| killThread mainId)) |
| -- | Load a renamed cell. | |
| resolveRenamedCell :: | |
| Map Hash (Either LoadError LoadedExpression) | |
| -> FillerEnv LoadError | |
| -> IsRenamed (Expression Renamed) | |
| -> RIO DocumentReader (Either LoadError (IsResolved (Expression Resolved))) | |
| resolveRenamedCell globalTypes globalHashes isRenamed = do | |
| hasConstraints <- | |
| pure $ | |
| first LoadGenerateError $ |
| fineGrained :: Spec | |
| fineGrained = do | |
| describe | |
| "Successful" | |
| (do it "a ~ a" (shouldReturn (unifyConstraints' [a .~ a]) (pure [])) | |
| it | |
| "Integer ~ Integer" | |
| (shouldReturn (unifyConstraints' [_Integer .~ _Integer]) (pure [])) | |
| it | |
| "a ~ b" |
| 22-03-21 13:32:52.939 $ cat /opt/hindent-ormolu | |
| #!/bin/bash | |
| /opt/ormolu-0.1.4.1 \ | |
| "--ghc-opt" "-XBangPatterns" \ | |
| "--ghc-opt" "-XNumericUnderscores" \ | |
| "--ghc-opt" "-XOverloadedLabels" \ | |
| "--ghc-opt" "-XPatternSynonyms" \ | |
| "--ghc-opt" "-XTypeApplications" \ | |
| "--mode" "stdout" |
When buying an SSL certificate from Namecheap, you generate a CSR, which generates a private key, save that for later as private.key.
After you've paid for your certificate, you recieve a zip file that looks like this:
$ ls -alh
total 52K
| Prelude/Data.List/Data.Vector/Data.Map: | |
| (!!) :: [a] -> Int -> a | |
| replicate :: Int -> a -> [a] | |
| take :: Int -> [a] -> [a] | |
| drop :: Int -> [a] -> [a] | |
| splitAt :: Int -> [a] -> ([a], [a]) | |
I'm exploring the right data types for writing a type inference with higher kinds and poly types.
Putting more things in the type system can force you to think about more things, but it also can make it harder and more verbose to write and read algorithms.
| {-# LANGUAGE TypeOperators, LambdaCase, StandaloneDeriving, GADTs #-} | |
| data Type env t where | |
| -- A constant type. Add kinds? | |
| -- Maybe, (), Int, Either, (->), etc. | |
| Constructor :: kind -> Type env kind | |
| -- A free variable. | |
| -- a | |
| FreeVariable :: kind -> Type env kind | |
| -- Type application. |
| -- Credit to: https://news.ycombinator.com/item?id=15186988 | |
| let iterate | |
| : (Natural → Natural) → Natural → Natural | |
| = \f n -> | |
| fold (n + 1) f 1 | |
| let increment : Natural → Natural = \n -> n + 1 | |
| let ackermann |