Skip to content

Instantly share code, notes, and snippets.

Avatar

Maxim Koltsov maksbotan

View GitHub Profile
@maksbotan
maksbotan / hls.patch
Created Apr 27, 2022
Haskell Language Server + haskell.nix patch
View hls.patch
diff --git a/ghcide/src/Development/IDE/Core/Compile.hs b/ghcide/src/Development/IDE/Core/Compile.hs
index 99938bd4..471b184c 100644
--- a/ghcide/src/Development/IDE/Core/Compile.hs
+++ b/ghcide/src/Development/IDE/Core/Compile.hs
@@ -122,6 +122,15 @@ import GHC.Hs (LEpaComment)
import qualified GHC.Types.Error as Error
#endif
+import StgSyn
+import FastString
@maksbotan
maksbotan / typecheck.py
Created Apr 8, 2020
Simplistic python typechecking
View typecheck.py
import ast
import sys
from enum import Enum
from typing import Dict, NamedTuple, Union
class PrimType(Enum):
ty_int = "int"
ty_bool = "bool"
@maksbotan
maksbotan / generic-validation.md
Last active Jul 5, 2020
Generic validation of nested data
View generic-validation.md

Generic validation of nested data

TLDR

This technique helps validate arbitrary conditions in deeply nested structures without writing additional code — with the help of Haskell Generics.

It boils down to this pattern:

@maksbotan
maksbotan / val.py
Created Feb 6, 2020
Example of type-level validation in python
View val.py
from dataclasses import dataclass
from typing import Generic, Optional, TypeVar
class Raw:
pass
class Valid:
pass
@maksbotan
maksbotan / enums.md
Created Dec 30, 2019
Generic валидация
View enums.md

Валидация enum'ов во вложенных структурах

Про этот файл

Это Literate Haskell файл. Вот как загрузить его в ghci:

$ stack --resolver=lts-13.6 install markdown-unlit
$ stack --resolver=lts-13.6 ghci enums.md --package aeson --package validation --package semigroups --package containers --package lens --package generic-lens --ghci-options='-pgmL markdown-unlit'
@maksbotan
maksbotan / aeson-via.hs
Created Dec 26, 2019
aeson deriving via
View aeson-via.hs
{-# LANGUAGE DeriveGeneric, DerivingVia, FlexibleInstances, UndecidableInstances #-}
import Data.Aeson
import Data.Aeson.Casing
import GHC.Generics
newtype CamelCaseJson a = CamelCaseJson a
deriving (Eq, Show, Generic)
instance (GToJSON Zero (Rep a), Generic a) => ToJSON (CamelCaseJson a) where
@maksbotan
maksbotan / 1_readme.md
Created Dec 8, 2019
GHC bug with TemplateHaskell + DuplicateRecordFields
View 1_readme.md

This is a minimal reproducing example for bug in GHC. It is observed in 8.6.3 (Stack LTS-13.6), 8.6.5 (nix) and 8.8.1 (nix).

$ ghc Exp.hs -ddump-splices
[1 of 2] Compiling TH               ( TH.hs, TH.o )
[2 of 2] Compiling Exp              ( Exp.hs, Exp.o )
Exp.hs:11:1-10: Splicing declarations make ''Bar ======>

Exp.hs:11:1: error:
@maksbotan
maksbotan / 1_Задание.md
Last active Apr 13, 2021
Задание по молекулярной динамике
View 1_Задание.md

Задание по молекулярной динамике

Молекулярная динамика — слишком красивая и наглядная тема, чтобы обойтись скучными задачами на CodeForces. Поэтому мы решили сделать задачи с визуализацией, чтобы вы увидели, как те или иные формулы выглядят "вживую".

Мы подготовили файл-заглушку, в которую вам нужно будет дописать свой код для интегрирования Verlet и для конкретных сил, которые предложены в заданиях ниже.

Установка нужных библиотек

@maksbotan
maksbotan / readme.md
Last active Jan 25, 2021
Как установить Python для курса по биоинформатике
View readme.md

Как установить Python для курса по биоинформатике

Наш курс включает в себя решения задач на практических занятиях, а также домашние задания. Для этого вам понадобится ноутбук с Python.

Если у вас уже установлен Python и вы уверены, что умеете им пользоваться, переходите сразу к разделам "Установка нужных библиотек" и "Дополнительные материалы".

Если у вас Mac — попробуйте адаптировать эту инструкцию для себя или обратитесь за помощью к организаторам курса. Если же у вас Linux, то вы скорее всего сами всё знаете. Если что-то всё же не получается, попросите помощи в нашем чате.

View hie.log
haskell-lsp:Starting up server ...
2018-09-07 11:49:18.303525648 [ThreadId 4] - ---> {"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{"textDocument":{"completion":{"completionItem":{"snippetSupport":false}}},"workspace":{"applyEdit":true,"didChangeWatchedFiles":{"dynamicRegistration":true}}},"processId":31802,"rootPath":"/home/maks/Projects/SRK/ariadne","rootUri":"file:///home/maks/Projects/SRK/ariadne","trace":"off"},"id":47}
2018-09-07 11:49:18.303819425 [ThreadId 4] - haskell-lsp:initializeRequestHandler: setting current dir to project root:/home/maks/Projects/SRK/ariadne
2018-09-07 11:49:18.304185589 [ThreadId 6] - <--2--{"result":{"capabilities":{"textDocumentSync":{"openClose":true,"change":2,"willSave":false,"willSaveWaitUntil":false,"save":{"includeText":false}},"documentRangeFormattingProvider":true,"documentHighlightProvider":true,"executeCommandProvider":{"commands":["490:applyrefact:applyOne","490:applyrefact:applyAll","490:applyrefact:lint","490:base:version","490:base:plugins","4