mirror of https://github.com/voidlizard/hbs2
ghc-9.6.6 + updated db-pipe
This commit is contained in:
parent
c240b8ad9e
commit
835c01bfaa
395
flake.lock
395
flake.lock
|
@ -1,47 +1,87 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
|
"bytestring-mmap": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1727193872,
|
||||||
|
"narHash": "sha256-L39kMCMry/BNJngt0+yvSIMnJJzWR9ZoyXbEyniEfwU=",
|
||||||
|
"owner": "ivanovs-4",
|
||||||
|
"repo": "bytestring-mmap",
|
||||||
|
"rev": "f43e5e06718ed904487f17e7725c12098773c12f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "ivanovs-4",
|
||||||
|
"repo": "bytestring-mmap",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"db-pipe": {
|
"db-pipe": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"haskell-flake-utils": "haskell-flake-utils",
|
"haskell-flake-utils": [
|
||||||
|
"haskell-flake-utils"
|
||||||
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1713359411,
|
"lastModified": 1727252661,
|
||||||
"narHash": "sha256-BzOZ6xU+Li5nIe71Wy4p+lOEQlYK/e94T0gBcP8IKgE=",
|
"narHash": "sha256-8vmgF0Atw+m7a+2Wmlnwjjyw8nSYv0QMT+zN9R3DljQ=",
|
||||||
"ref": "generic-sql",
|
"ref": "refs/heads/master",
|
||||||
"rev": "03635c54b2e2bd809ec1196bc9082447279f6f24",
|
"rev": "8b614540a7f30f0227cb18ef2ad4c8d84db4a75c",
|
||||||
"revCount": 9,
|
"revCount": 9,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.hbs2.net/5xrwbTzzweS9yeJQnrrUY9gQJfhJf84pbyHhF2MMmSft"
|
"url": "https://git.hbs2.net/5xrwbTzzweS9yeJQnrrUY9gQJfhJf84pbyHhF2MMmSft"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"ref": "generic-sql",
|
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.hbs2.net/5xrwbTzzweS9yeJQnrrUY9gQJfhJf84pbyHhF2MMmSft"
|
"url": "https://git.hbs2.net/5xrwbTzzweS9yeJQnrrUY9gQJfhJf84pbyHhF2MMmSft"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"db-pipe_2": {
|
||||||
|
"inputs": {
|
||||||
|
"haskell-flake-utils": [
|
||||||
|
"lsm",
|
||||||
|
"haskell-flake-utils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"lsm",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1713519608,
|
||||||
|
"narHash": "sha256-MBBsIdK1am/usgdBYr6ZoKm1pwv7u9ujS/tiNRrn0m8=",
|
||||||
|
"ref": "refs/heads/master",
|
||||||
|
"rev": "b755977dd737ff367c7eb19efd9e273d1bd37ed7",
|
||||||
|
"revCount": 8,
|
||||||
|
"type": "git",
|
||||||
|
"url": "http://git.hbs2/5xrwbTzzweS9yeJQnrrUY9gQJfhJf84pbyHhF2MMmSft"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "http://git.hbs2/5xrwbTzzweS9yeJQnrrUY9gQJfhJf84pbyHhF2MMmSft"
|
||||||
|
}
|
||||||
|
},
|
||||||
"fixme": {
|
"fixme": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"haskell-flake-utils": "haskell-flake-utils_2",
|
"haskell-flake-utils": "haskell-flake-utils_2",
|
||||||
"nixpkgs": [
|
"nixpkgs": "nixpkgs",
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"suckless-conf": "suckless-conf"
|
"suckless-conf": "suckless-conf"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1697356303,
|
"lastModified": 1714707469,
|
||||||
"narHash": "sha256-hJbJZtx7gdcXaKL8n5J8b/eVyoYe9VxM+037ZK7q8Gw=",
|
"narHash": "sha256-uL3j7NmCWADN0rIyVr3bv0JFMPgYgrnb1wiJW5tZ9jU=",
|
||||||
"ref": "refs/heads/master",
|
"owner": "voidlizard",
|
||||||
"rev": "e9b1dcfd78dc766a2255a8125c14b24f0d728c0e",
|
"repo": "fixme",
|
||||||
"revCount": 139,
|
"rev": "51485aa169c7b2040b6e2b8d096f38ed77146482",
|
||||||
"type": "git",
|
"type": "github"
|
||||||
"url": "https://git.hbs2.net/Fujv1Uy4W5d9Z7REEArMxbXSJ8nLLn4dYuvaAs8b86hr"
|
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"type": "git",
|
"owner": "voidlizard",
|
||||||
"url": "https://git.hbs2.net/Fujv1Uy4W5d9Z7REEArMxbXSJ8nLLn4dYuvaAs8b86hr"
|
"repo": "fixme",
|
||||||
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
|
@ -89,109 +129,21 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-utils_4": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1644229661,
|
|
||||||
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-utils_5": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1644229661,
|
|
||||||
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-utils_6": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1644229661,
|
|
||||||
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-utils_7": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1644229661,
|
|
||||||
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-utils_8": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1644229661,
|
|
||||||
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-utils_9": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1644229661,
|
|
||||||
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fuzzy": {
|
"fuzzy": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"haskell-flake-utils": "haskell-flake-utils_4",
|
"haskell-flake-utils": [
|
||||||
|
"haskell-flake-utils"
|
||||||
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1715919110,
|
"lastModified": 1727197542,
|
||||||
"narHash": "sha256-moioa3ixAZb0y/xxyxUVjSvXoSiDGXy/vAx6B70d2yM=",
|
"narHash": "sha256-BF9Xd2fa8L5Xju9NTaoUjmzUEJfrRMMKULYQieBjbKo=",
|
||||||
"ref": "refs/heads/master",
|
"ref": "refs/heads/master",
|
||||||
"rev": "5a55c22750589b357e50b759d2a754df058446d6",
|
"rev": "a834b152e29d632c816eefe117036e5d9330bd03",
|
||||||
"revCount": 40,
|
"revCount": 43,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.hbs2.net/GmcLB9gEPT4tbx9eyQiECwsu8oPyEh6qKEpQDtyBWVPA"
|
"url": "https://git.hbs2.net/GmcLB9gEPT4tbx9eyQiECwsu8oPyEh6qKEpQDtyBWVPA"
|
||||||
},
|
},
|
||||||
|
@ -200,39 +152,21 @@
|
||||||
"url": "https://git.hbs2.net/GmcLB9gEPT4tbx9eyQiECwsu8oPyEh6qKEpQDtyBWVPA"
|
"url": "https://git.hbs2.net/GmcLB9gEPT4tbx9eyQiECwsu8oPyEh6qKEpQDtyBWVPA"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"fuzzy_2": {
|
|
||||||
"inputs": {
|
|
||||||
"haskell-flake-utils": "haskell-flake-utils_8",
|
|
||||||
"nixpkgs": "nixpkgs_2"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1715918584,
|
|
||||||
"narHash": "sha256-moioa3ixAZb0y/xxyxUVjSvXoSiDGXy/vAx6B70d2yM=",
|
|
||||||
"rev": "831879978213a1aed15ac70aa116c33bcbe964b8",
|
|
||||||
"revCount": 63,
|
|
||||||
"type": "git",
|
|
||||||
"url": "http://git.hbs2.net/GmcLB9gEPT4tbx9eyQiECwsu8oPyEh6qKEpQDtyBWVPA?tag=0.1.3.1"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"rev": "831879978213a1aed15ac70aa116c33bcbe964b8",
|
|
||||||
"type": "git",
|
|
||||||
"url": "http://git.hbs2.net/GmcLB9gEPT4tbx9eyQiECwsu8oPyEh6qKEpQDtyBWVPA?tag=0.1.3.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"haskell-flake-utils": {
|
"haskell-flake-utils": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils"
|
"flake-utils": "flake-utils"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1698938553,
|
"lastModified": 1707809372,
|
||||||
"narHash": "sha256-oXpTKXioqFbl2mhhvpJIAvgNd+wYyv4ekI+YnJHEJ6s=",
|
"narHash": "sha256-wfTL9PlCSOqSSyU4eenFFI7pHrV21gba4GEILnI4nAU=",
|
||||||
"owner": "ivanovs-4",
|
"owner": "ivanovs-4",
|
||||||
"repo": "haskell-flake-utils",
|
"repo": "haskell-flake-utils",
|
||||||
"rev": "19b273b5dc401a0a565e7f75cf50a593871b80c9",
|
"rev": "3cbdc5d6093e8b4464ae64097e0c8c61e4414ff2",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "ivanovs-4",
|
"owner": "ivanovs-4",
|
||||||
|
"ref": "master",
|
||||||
"repo": "haskell-flake-utils",
|
"repo": "haskell-flake-utils",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
@ -273,119 +207,11 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"haskell-flake-utils_4": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": "flake-utils_4"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1707809372,
|
|
||||||
"narHash": "sha256-wfTL9PlCSOqSSyU4eenFFI7pHrV21gba4GEILnI4nAU=",
|
|
||||||
"owner": "ivanovs-4",
|
|
||||||
"repo": "haskell-flake-utils",
|
|
||||||
"rev": "3cbdc5d6093e8b4464ae64097e0c8c61e4414ff2",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "ivanovs-4",
|
|
||||||
"repo": "haskell-flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"haskell-flake-utils_5": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": "flake-utils_5"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1698938553,
|
|
||||||
"narHash": "sha256-oXpTKXioqFbl2mhhvpJIAvgNd+wYyv4ekI+YnJHEJ6s=",
|
|
||||||
"owner": "ivanovs-4",
|
|
||||||
"repo": "haskell-flake-utils",
|
|
||||||
"rev": "19b273b5dc401a0a565e7f75cf50a593871b80c9",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "ivanovs-4",
|
|
||||||
"ref": "master",
|
|
||||||
"repo": "haskell-flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"haskell-flake-utils_6": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": "flake-utils_6"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1672412555,
|
|
||||||
"narHash": "sha256-Kaa8F7nQFR3KuS6Y9WRUxeJeZlp6CCubyrRfmiEsW4k=",
|
|
||||||
"owner": "ivanovs-4",
|
|
||||||
"repo": "haskell-flake-utils",
|
|
||||||
"rev": "896219e5bde6efac72198550454e9dd9b5ed9ac9",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "ivanovs-4",
|
|
||||||
"repo": "haskell-flake-utils",
|
|
||||||
"rev": "896219e5bde6efac72198550454e9dd9b5ed9ac9",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"haskell-flake-utils_7": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": "flake-utils_7"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1698938553,
|
|
||||||
"narHash": "sha256-oXpTKXioqFbl2mhhvpJIAvgNd+wYyv4ekI+YnJHEJ6s=",
|
|
||||||
"owner": "ivanovs-4",
|
|
||||||
"repo": "haskell-flake-utils",
|
|
||||||
"rev": "19b273b5dc401a0a565e7f75cf50a593871b80c9",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "ivanovs-4",
|
|
||||||
"repo": "haskell-flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"haskell-flake-utils_8": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": "flake-utils_8"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1707809372,
|
|
||||||
"narHash": "sha256-wfTL9PlCSOqSSyU4eenFFI7pHrV21gba4GEILnI4nAU=",
|
|
||||||
"owner": "ivanovs-4",
|
|
||||||
"repo": "haskell-flake-utils",
|
|
||||||
"rev": "3cbdc5d6093e8b4464ae64097e0c8c61e4414ff2",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "ivanovs-4",
|
|
||||||
"repo": "haskell-flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"haskell-flake-utils_9": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": "flake-utils_9"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1672412555,
|
|
||||||
"narHash": "sha256-Kaa8F7nQFR3KuS6Y9WRUxeJeZlp6CCubyrRfmiEsW4k=",
|
|
||||||
"owner": "ivanovs-4",
|
|
||||||
"repo": "haskell-flake-utils",
|
|
||||||
"rev": "896219e5bde6efac72198550454e9dd9b5ed9ac9",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "ivanovs-4",
|
|
||||||
"repo": "haskell-flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hspup": {
|
"hspup": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"haskell-flake-utils": "haskell-flake-utils_6",
|
"haskell-flake-utils": [
|
||||||
|
"haskell-flake-utils"
|
||||||
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
|
@ -406,17 +232,21 @@
|
||||||
},
|
},
|
||||||
"lsm": {
|
"lsm": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"haskell-flake-utils": "haskell-flake-utils_7",
|
"db-pipe": "db-pipe_2",
|
||||||
|
"fixme": "fixme",
|
||||||
|
"haskell-flake-utils": [
|
||||||
|
"haskell-flake-utils"
|
||||||
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1711033804,
|
"lastModified": 1715418443,
|
||||||
"narHash": "sha256-z9cb5yuWfuZmGukxsZebXhc6KUZoPVT60oXxQ6j6ML8=",
|
"narHash": "sha256-uhc9bf6myVz0Nx8Aoyc6/03FBQVyMqa78ByZzlrvKvY=",
|
||||||
"ref": "refs/heads/master",
|
"ref": "refs/heads/master",
|
||||||
"rev": "0e8286a43da5b9e54c4f3ecdb994173fe77351db",
|
"rev": "e9aab0bcb79f4c811b5fb795f878b38874218809",
|
||||||
"revCount": 26,
|
"revCount": 57,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.hbs2.net/5BCaH95cWsVKBmWaDNLWQr2umxzzT5kqRRKNTm2J15Ls"
|
"url": "https://git.hbs2.net/5BCaH95cWsVKBmWaDNLWQr2umxzzT5kqRRKNTm2J15Ls"
|
||||||
},
|
},
|
||||||
|
@ -427,11 +257,27 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1707451808,
|
"lastModified": 1697009197,
|
||||||
"narHash": "sha256-UwDBUNHNRsYKFJzyTMVMTF5qS4xeJlWoeyJf+6vvamU=",
|
"narHash": "sha256-viVRhBTFT8fPJTb1N3brQIpFZnttmwo3JVKNuWRVc3s=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "01441e14af5e29c9d27ace398e6dd0b293e25a54",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1727089097,
|
||||||
|
"narHash": "sha256-ZMHMThPsthhUREwDebXw7GX45bJnBCVbfnH1g5iuSPc=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "442d407992384ed9c0e6d352de75b69079904e4e",
|
"rev": "568bfef547c14ca438c56a0bece08b8bb2b71a9c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -441,31 +287,15 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1707451808,
|
|
||||||
"narHash": "sha256-UwDBUNHNRsYKFJzyTMVMTF5qS4xeJlWoeyJf+6vvamU=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "442d407992384ed9c0e6d352de75b69079904e4e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "442d407992384ed9c0e6d352de75b69079904e4e",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"bytestring-mmap": "bytestring-mmap",
|
||||||
"db-pipe": "db-pipe",
|
"db-pipe": "db-pipe",
|
||||||
"fixme": "fixme",
|
|
||||||
"fuzzy": "fuzzy",
|
"fuzzy": "fuzzy",
|
||||||
"haskell-flake-utils": "haskell-flake-utils_5",
|
"haskell-flake-utils": "haskell-flake-utils",
|
||||||
"hspup": "hspup",
|
"hspup": "hspup",
|
||||||
"lsm": "lsm",
|
"lsm": "lsm",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs_2",
|
||||||
"saltine": "saltine",
|
"saltine": "saltine",
|
||||||
"suckless-conf": "suckless-conf_2"
|
"suckless-conf": "suckless-conf_2"
|
||||||
}
|
}
|
||||||
|
@ -491,6 +321,7 @@
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"haskell-flake-utils": "haskell-flake-utils_3",
|
"haskell-flake-utils": "haskell-flake-utils_3",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
"lsm",
|
||||||
"fixme",
|
"fixme",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
|
@ -511,22 +342,26 @@
|
||||||
},
|
},
|
||||||
"suckless-conf_2": {
|
"suckless-conf_2": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"fuzzy": "fuzzy_2",
|
"fuzzy": [
|
||||||
"haskell-flake-utils": "haskell-flake-utils_9",
|
"fuzzy"
|
||||||
|
],
|
||||||
|
"haskell-flake-utils": [
|
||||||
|
"haskell-flake-utils"
|
||||||
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1724740155,
|
"lastModified": 1727200798,
|
||||||
"narHash": "sha256-dHAWLoQ0uZ2FckV/93qbXo6aYCTY+jARXiiTgUt6fcA=",
|
"narHash": "sha256-esabG5zoApNLbirx0mCj1+3ZPFU9Ckod9wSn9MHc0mo=",
|
||||||
"rev": "b6c5087312e6c09e5c27082da47846f377f73756",
|
"ref": "refs/heads/master",
|
||||||
"revCount": 38,
|
"rev": "ff6f1a2e053005a52af5c7375fb66e8bb89bce2d",
|
||||||
|
"revCount": 40,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.hbs2.net/JAuk1UJzZfbDGKVazSQU5yYQ3NGfk4gVeZzBCduf5TgQ"
|
"url": "https://git.hbs2.net/JAuk1UJzZfbDGKVazSQU5yYQ3NGfk4gVeZzBCduf5TgQ"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"rev": "b6c5087312e6c09e5c27082da47846f377f73756",
|
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.hbs2.net/JAuk1UJzZfbDGKVazSQU5yYQ3NGfk4gVeZzBCduf5TgQ"
|
"url": "https://git.hbs2.net/JAuk1UJzZfbDGKVazSQU5yYQ3NGfk4gVeZzBCduf5TgQ"
|
||||||
}
|
}
|
||||||
|
|
45
flake.nix
45
flake.nix
|
@ -8,30 +8,37 @@ inputs = {
|
||||||
haskell-flake-utils.url = "github:ivanovs-4/haskell-flake-utils/master";
|
haskell-flake-utils.url = "github:ivanovs-4/haskell-flake-utils/master";
|
||||||
hspup.url = "github:voidlizard/hspup";
|
hspup.url = "github:voidlizard/hspup";
|
||||||
hspup.inputs.nixpkgs.follows = "nixpkgs";
|
hspup.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
hspup.inputs.haskell-flake-utils.follows = "haskell-flake-utils";
|
||||||
|
|
||||||
fixme.url = "git+https://git.hbs2.net/Fujv1Uy4W5d9Z7REEArMxbXSJ8nLLn4dYuvaAs8b86hr";
|
suckless-conf.url = "git+https://git.hbs2.net/JAuk1UJzZfbDGKVazSQU5yYQ3NGfk4gVeZzBCduf5TgQ";
|
||||||
#fixme.url = "git+file:///home/dmz/w/fixme?ref=dev-0.2";
|
|
||||||
fixme.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
|
|
||||||
suckless-conf.url =
|
|
||||||
"git+https://git.hbs2.net/JAuk1UJzZfbDGKVazSQU5yYQ3NGfk4gVeZzBCduf5TgQ?rev=b6c5087312e6c09e5c27082da47846f377f73756";
|
|
||||||
|
|
||||||
suckless-conf.inputs.nixpkgs.follows = "nixpkgs";
|
suckless-conf.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
suckless-conf.inputs.fuzzy.follows = "fuzzy";
|
||||||
|
suckless-conf.inputs.haskell-flake-utils.follows = "haskell-flake-utils";
|
||||||
|
|
||||||
db-pipe.url = "git+https://git.hbs2.net/5xrwbTzzweS9yeJQnrrUY9gQJfhJf84pbyHhF2MMmSft?ref=generic-sql";
|
db-pipe.url = "git+https://git.hbs2.net/5xrwbTzzweS9yeJQnrrUY9gQJfhJf84pbyHhF2MMmSft";
|
||||||
db-pipe.inputs.nixpkgs.follows = "nixpkgs";
|
db-pipe.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
db-pipe.inputs.haskell-flake-utils.follows = "haskell-flake-utils";
|
||||||
|
|
||||||
lsm.url = "git+https://git.hbs2.net/5BCaH95cWsVKBmWaDNLWQr2umxzzT5kqRRKNTm2J15Ls";
|
lsm.url = "git+https://git.hbs2.net/5BCaH95cWsVKBmWaDNLWQr2umxzzT5kqRRKNTm2J15Ls";
|
||||||
lsm.inputs.nixpkgs.follows = "nixpkgs";
|
lsm.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
lsm.inputs.haskell-flake-utils.follows = "haskell-flake-utils";
|
||||||
|
|
||||||
|
# fuzzy.url = "git+file:/home/iv/haskell/p2p/hex-offgrid/fuzzy-parse"; # tmp
|
||||||
fuzzy.url = "git+https://git.hbs2.net/GmcLB9gEPT4tbx9eyQiECwsu8oPyEh6qKEpQDtyBWVPA";
|
fuzzy.url = "git+https://git.hbs2.net/GmcLB9gEPT4tbx9eyQiECwsu8oPyEh6qKEpQDtyBWVPA";
|
||||||
fuzzy.inputs.nixpkgs.follows = "nixpkgs";
|
fuzzy.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
fuzzy.inputs.haskell-flake-utils.follows = "haskell-flake-utils";
|
||||||
|
|
||||||
saltine = {
|
saltine = {
|
||||||
url = "github:tel/saltine/3d3a54cf46f78b71b4b55653482fb6f4cee6b77d";
|
url = "github:tel/saltine/3d3a54cf46f78b71b4b55653482fb6f4cee6b77d";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bytestring-mmap = {
|
||||||
|
url = "github:ivanovs-4/bytestring-mmap";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, haskell-flake-utils, ... }@inputs:
|
outputs = { self, nixpkgs, haskell-flake-utils, ... }@inputs:
|
||||||
|
@ -78,10 +85,27 @@ outputs = { self, nixpkgs, haskell-flake-utils, ... }@inputs:
|
||||||
"fixme-new" = "./fixme-new";
|
"fixme-new" = "./fixme-new";
|
||||||
};
|
};
|
||||||
|
|
||||||
hpPreOverrides = {pkgs, ...}: final: prev: with pkgs; {
|
hpPreOverrides = {pkgs, ...}: final: prev: ((with pkgs; {
|
||||||
saltine = prev.callCabal2nix "saltine" inputs.saltine { inherit (pkgs) libsodium; };
|
saltine = prev.callCabal2nix "saltine" inputs.saltine { inherit (pkgs) libsodium; };
|
||||||
scotty = final.callHackage "scotty" "0.21" { };
|
scotty = final.callHackage "scotty" "0.21" { };
|
||||||
};
|
bytestring-mmap = prev.callCabal2nix "bytestring-mmap" inputs.bytestring-mmap {};
|
||||||
|
skylighting-lucid = final.callHackage "skylighting-lucid" "1.0.4" { };
|
||||||
|
# wai-app-file-cgi = final.callHackage "wai-app-file-cgi" "3.1.11" { };
|
||||||
|
# htags = final.callHackage "htags" "1.0.1" { };
|
||||||
|
}) //
|
||||||
|
(with haskell-flake-utils.lib;
|
||||||
|
with pkgs.haskell.lib;
|
||||||
|
let
|
||||||
|
donts = [
|
||||||
|
(jailbreakUnbreak pkgs)
|
||||||
|
# dontBenchmark
|
||||||
|
dontCoverage
|
||||||
|
dontCheck
|
||||||
|
];
|
||||||
|
in tunePackages pkgs prev {
|
||||||
|
wai-app-file-cgi = donts;
|
||||||
|
}
|
||||||
|
));
|
||||||
|
|
||||||
packagePostOverrides = { pkgs }: with pkgs; with haskell.lib; [
|
packagePostOverrides = { pkgs }: with pkgs; with haskell.lib; [
|
||||||
disableExecutableProfiling
|
disableExecutableProfiling
|
||||||
|
@ -115,7 +139,7 @@ outputs = { self, nixpkgs, haskell-flake-utils, ... }@inputs:
|
||||||
cabal-install
|
cabal-install
|
||||||
haskell-language-server
|
haskell-language-server
|
||||||
hoogle
|
hoogle
|
||||||
htags
|
# htags
|
||||||
text-icu
|
text-icu
|
||||||
magic
|
magic
|
||||||
pkgs.icu72
|
pkgs.icu72
|
||||||
|
@ -125,7 +149,6 @@ outputs = { self, nixpkgs, haskell-flake-utils, ... }@inputs:
|
||||||
++
|
++
|
||||||
[ pkgs.pkg-config
|
[ pkgs.pkg-config
|
||||||
inputs.hspup.packages.${pkgs.system}.default
|
inputs.hspup.packages.${pkgs.system}.default
|
||||||
inputs.fixme.packages.${pkgs.system}.default
|
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -7,16 +7,12 @@ module HBS2.Actors
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import HBS2.Prelude
|
import HBS2.Prelude
|
||||||
import HBS2.Clock
|
|
||||||
|
|
||||||
import Control.Concurrent.STM
|
import Control.Concurrent.STM
|
||||||
import Control.Concurrent.STM.TBMQueue qualified as TBMQ
|
import Control.Concurrent.STM.TBMQueue qualified as TBMQ
|
||||||
import Control.Concurrent.STM.TBMQueue (TBMQueue)
|
import Control.Concurrent.STM.TBMQueue (TBMQueue)
|
||||||
import Control.Concurrent.STM.TVar qualified as TVar
|
import Control.Concurrent.STM.TVar qualified as TVar
|
||||||
import Control.Monad
|
|
||||||
import Control.Concurrent.Async
|
|
||||||
import Data.Function
|
import Data.Function
|
||||||
import Data.Functor
|
|
||||||
import Data.Kind
|
import Data.Kind
|
||||||
import Control.Concurrent
|
import Control.Concurrent
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,6 @@ import HBS2.Events
|
||||||
import HBS2.Net.Auth.Credentials
|
import HBS2.Net.Auth.Credentials
|
||||||
import HBS2.Net.Messaging
|
import HBS2.Net.Messaging
|
||||||
import HBS2.Net.PeerLocator
|
import HBS2.Net.PeerLocator
|
||||||
import HBS2.Net.PeerLocator.Static
|
|
||||||
import HBS2.Net.Proto
|
|
||||||
import HBS2.Net.Proto.Sessions
|
import HBS2.Net.Proto.Sessions
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.Storage
|
import HBS2.Storage
|
||||||
|
@ -26,6 +24,7 @@ import HBS2.System.Logger.Simple
|
||||||
|
|
||||||
import Data.Config.Suckless.KeyValue (HasConf(..))
|
import Data.Config.Suckless.KeyValue (HasConf(..))
|
||||||
|
|
||||||
|
import Control.Monad
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
import Control.Concurrent.Async
|
import Control.Concurrent.Async
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
|
@ -33,7 +32,6 @@ import Data.ByteString.Lazy (ByteString)
|
||||||
import Data.Cache (Cache)
|
import Data.Cache (Cache)
|
||||||
import Data.Cache qualified as Cache
|
import Data.Cache qualified as Cache
|
||||||
import Data.Dynamic
|
import Data.Dynamic
|
||||||
import Data.Foldable hiding (find)
|
|
||||||
import Data.Map qualified as Map
|
import Data.Map qualified as Map
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import GHC.TypeLits
|
import GHC.TypeLits
|
||||||
|
@ -264,7 +262,7 @@ instance ( MonadIO m
|
||||||
) => Request e msg m where
|
) => Request e msg m where
|
||||||
request peer_e msg = do
|
request peer_e msg = do
|
||||||
let proto = protoId @e @msg (Proxy @msg)
|
let proto = protoId @e @msg (Proxy @msg)
|
||||||
pipe <- getFabriq @e
|
pip <- getFabriq @e
|
||||||
me <- ownPeer @e
|
me <- ownPeer @e
|
||||||
|
|
||||||
-- TODO: check if a request were sent to peer and timeout is here
|
-- TODO: check if a request were sent to peer and timeout is here
|
||||||
|
@ -281,7 +279,7 @@ instance ( MonadIO m
|
||||||
trace $ "REQUEST: not allowed to send for proto" <+> viaShow proto
|
trace $ "REQUEST: not allowed to send for proto" <+> viaShow proto
|
||||||
|
|
||||||
when allowed do
|
when allowed do
|
||||||
sendTo pipe (To peer_e) (From me) (AnyMessage @(Encoded e) @e proto (encode msg))
|
sendTo pip (To peer_e) (From me) (AnyMessage @(Encoded e) @e proto (encode msg))
|
||||||
-- trace $ "REQUEST: after sendTo" <+> viaShow peer_e
|
-- trace $ "REQUEST: after sendTo" <+> viaShow peer_e
|
||||||
|
|
||||||
|
|
||||||
|
@ -431,7 +429,7 @@ runProto :: forall e m . ( MonadIO m
|
||||||
|
|
||||||
runProto hh = do
|
runProto hh = do
|
||||||
me <- ownPeer @e @m
|
me <- ownPeer @e @m
|
||||||
pipe <- getFabriq @e
|
pipf <- getFabriq @e
|
||||||
|
|
||||||
let resp = [ (pid, a) | a@AnyProtocol { myProtoId = pid } <- hh ]
|
let resp = [ (pid, a) | a@AnyProtocol { myProtoId = pid } <- hh ]
|
||||||
|
|
||||||
|
@ -439,7 +437,7 @@ runProto hh = do
|
||||||
|
|
||||||
forever $ do
|
forever $ do
|
||||||
|
|
||||||
messages <- receive @_ @e pipe (To me)
|
messages <- receive @_ @e pipf (To me)
|
||||||
|
|
||||||
for_ messages $ \(From pip, AnyMessage n msg :: AnyMessage (Encoded e) e) -> do
|
for_ messages $ \(From pip, AnyMessage n msg :: AnyMessage (Encoded e) e) -> do
|
||||||
|
|
||||||
|
|
|
@ -2,15 +2,10 @@
|
||||||
module HBS2.Actors.Peer.Types where
|
module HBS2.Actors.Peer.Types where
|
||||||
|
|
||||||
import HBS2.Prelude
|
import HBS2.Prelude
|
||||||
import HBS2.Storage
|
|
||||||
import HBS2.Net.Proto.Types
|
import HBS2.Net.Proto.Types
|
||||||
import HBS2.Net.Messaging
|
import HBS2.Net.Messaging
|
||||||
import HBS2.Hash
|
|
||||||
|
|
||||||
import Control.Monad.Trans.Class
|
import Control.Monad.Trans.Class
|
||||||
import Data.ByteString.Lazy (ByteString)
|
|
||||||
import Control.Monad
|
|
||||||
import Codec.Serialise
|
|
||||||
|
|
||||||
class HasProtocol e p => HasTimeLimits e p m where
|
class HasProtocol e p => HasTimeLimits e p m where
|
||||||
tryLockForPeriod :: Peer e -> p -> m Bool
|
tryLockForPeriod :: Peer e -> p -> m Bool
|
||||||
|
|
|
@ -4,10 +4,8 @@ import Data.ByteString.Base58 (encodeBase58, bitcoinAlphabet, decodeBase58,Alpha
|
||||||
import Data.ByteString qualified as BS
|
import Data.ByteString qualified as BS
|
||||||
import Data.ByteString.Char8 qualified as BS8
|
import Data.ByteString.Char8 qualified as BS8
|
||||||
import Data.ByteString.Char8 (ByteString)
|
import Data.ByteString.Char8 (ByteString)
|
||||||
import Data.ByteString.Lazy.Char8 qualified as LBS8
|
|
||||||
import Data.ByteString.Lazy qualified as LBS
|
import Data.ByteString.Lazy qualified as LBS
|
||||||
import Data.Word
|
import Data.Word
|
||||||
import Data.Char (ord)
|
|
||||||
import Numeric
|
import Numeric
|
||||||
|
|
||||||
import Prettyprinter
|
import Prettyprinter
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
{-# LANGUAGE CPP #-}
|
{-# LANGUAGE CPP #-}
|
||||||
|
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
||||||
module HBS2.Clock
|
module HBS2.Clock
|
||||||
( module HBS2.Clock
|
( module HBS2.Clock
|
||||||
, module System.Clock
|
, module System.Clock
|
||||||
, POSIXTime, getPOSIXTime, getEpoch
|
, POSIXTime, getPOSIXTime
|
||||||
)where
|
)where
|
||||||
|
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
|
@ -14,7 +15,6 @@ import Data.Proxy
|
||||||
import Data.Time
|
import Data.Time
|
||||||
import Prettyprinter
|
import Prettyprinter
|
||||||
import System.Clock
|
import System.Clock
|
||||||
import Data.Time.Clock
|
|
||||||
import Data.Time.Clock.POSIX (POSIXTime, getPOSIXTime)
|
import Data.Time.Clock.POSIX (POSIXTime, getPOSIXTime)
|
||||||
import Data.Word
|
import Data.Word
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ instance IsTimeout t => Expired (Timeout t) TimeSpec where
|
||||||
-- expired timeout ts = False
|
-- expired timeout ts = False
|
||||||
|
|
||||||
toNominalDiffTime :: IsTimeout t => Timeout t -> NominalDiffTime
|
toNominalDiffTime :: IsTimeout t => Timeout t -> NominalDiffTime
|
||||||
toNominalDiffTime = fromRational . (/ (10^6)) . fromIntegral . toMicroSeconds
|
toNominalDiffTime = fromRational . (/ (10^(6 :: Integer))) . fromIntegral . toMicroSeconds
|
||||||
|
|
||||||
class IsTimeout a => MonadPause a m where
|
class IsTimeout a => MonadPause a m where
|
||||||
pause :: Timeout a -> m ()
|
pause :: Timeout a -> m ()
|
||||||
|
@ -97,7 +97,7 @@ instance IsTimeout 'Minutes where
|
||||||
toNanoSeconds (TimeoutMin x) = round (x * 60 * 1e9)
|
toNanoSeconds (TimeoutMin x) = round (x * 60 * 1e9)
|
||||||
|
|
||||||
instance IsTimeout 'NomDiffTime where
|
instance IsTimeout 'NomDiffTime where
|
||||||
toNanoSeconds (TimeoutNDT t) = round (realToFrac (nominalDiffTimeToSeconds t) * 1e9)
|
toNanoSeconds (TimeoutNDT t) = round (realToFrac (nominalDiffTimeToSeconds t) * (1e9 :: Double))
|
||||||
|
|
||||||
instance IsTimeout 'TS where
|
instance IsTimeout 'TS where
|
||||||
toNanoSeconds (TimeoutTS s) = fromIntegral $ toNanoSecs s
|
toNanoSeconds (TimeoutTS s) = fromIntegral $ toNanoSecs s
|
||||||
|
|
|
@ -178,7 +178,7 @@ instance MonadIO m => ImportBundle HashRef m where
|
||||||
go hd bs
|
go hd bs
|
||||||
| LBS.null bs = pure $ Right ()
|
| LBS.null bs = pure $ Right ()
|
||||||
| otherwise = do
|
| otherwise = do
|
||||||
let ss = bundleHeadSectionSize hd
|
let _ss = bundleHeadSectionSize hd
|
||||||
let (bsh, allBsRest) = LBS.splitAt sectionHeadSize bs
|
let (bsh, allBsRest) = LBS.splitAt sectionHeadSize bs
|
||||||
case deserialiseOrFail @BundleSection bsh of
|
case deserialiseOrFail @BundleSection bsh of
|
||||||
Left{} -> do
|
Left{} -> do
|
||||||
|
|
|
@ -6,25 +6,25 @@ import HBS2.Data.Types
|
||||||
import HBS2.Merkle
|
import HBS2.Merkle
|
||||||
import HBS2.Storage
|
import HBS2.Storage
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
-- import HBS2.System.Logger.Simple
|
||||||
|
|
||||||
import Data.Foldable (for_)
|
-- import Data.Foldable (for_)
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
import Codec.Serialise (deserialiseOrFail)
|
import Codec.Serialise (deserialiseOrFail)
|
||||||
import Data.ByteString.Lazy (ByteString)
|
import Data.ByteString.Lazy (ByteString)
|
||||||
import Data.ByteString.Lazy qualified as LBS
|
import Data.ByteString.Lazy qualified as LBS
|
||||||
import Data.Either
|
import Data.Either
|
||||||
import Data.Function
|
-- import Data.Function
|
||||||
import Data.Functor
|
-- import Data.Functor
|
||||||
|
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Control.Concurrent.STM
|
import Control.Concurrent.STM
|
||||||
import Data.HashMap.Strict qualified as HashMap
|
import Data.HashMap.Strict qualified as HashMap
|
||||||
import Data.HashMap.Strict (HashMap)
|
-- import Data.HashMap.Strict (HashMap)
|
||||||
import Data.List qualified as List
|
import Data.List qualified as List
|
||||||
|
|
||||||
import Streaming.Prelude qualified as S
|
import Streaming.Prelude qualified as S
|
||||||
import Streaming qualified as S
|
-- import Streaming qualified as S
|
||||||
|
|
||||||
data BlobType = Merkle (MTree [HashRef])
|
data BlobType = Merkle (MTree [HashRef])
|
||||||
| MerkleAnn (MTreeAnn [HashRef])
|
| MerkleAnn (MTreeAnn [HashRef])
|
||||||
|
|
|
@ -9,7 +9,6 @@ import System.FilePath
|
||||||
import System.Directory
|
import System.Directory
|
||||||
import Data.List as L
|
import Data.List as L
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.ByteString.Lazy qualified as LBS
|
|
||||||
import Data.ByteString qualified as BS
|
import Data.ByteString qualified as BS
|
||||||
import Lens.Micro.Platform
|
import Lens.Micro.Platform
|
||||||
import UnliftIO
|
import UnliftIO
|
||||||
|
@ -23,7 +22,7 @@ splitPattern fp = (pref, flt)
|
||||||
pref = joinPath pref'
|
pref = joinPath pref'
|
||||||
flt = case flt' of
|
flt = case flt' of
|
||||||
[] -> "*"
|
[] -> "*"
|
||||||
xs -> joinPath flt'
|
_xs -> joinPath flt'
|
||||||
(pref', flt') = L.span isNotP (splitDirectories fp)
|
(pref', flt') = L.span isNotP (splitDirectories fp)
|
||||||
isNotP s = isNothing (find isP s)
|
isNotP s = isNothing (find isP s)
|
||||||
isP c = c `elem` ("?*" :: [Char])
|
isP c = c `elem` ("?*" :: [Char])
|
||||||
|
|
|
@ -2,7 +2,6 @@ module HBS2.Data.Types
|
||||||
( module X
|
( module X
|
||||||
-- , module HBS2.Data.Types.Crypto
|
-- , module HBS2.Data.Types.Crypto
|
||||||
, AsSyntax(..)
|
, AsSyntax(..)
|
||||||
, LoadedRef(..)
|
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,12 @@
|
||||||
{-# Language UndecidableInstances #-}
|
{-# Language UndecidableInstances #-}
|
||||||
module HBS2.Data.Types.Peer where
|
module HBS2.Data.Types.Peer where
|
||||||
|
|
||||||
import Codec.Serialise
|
|
||||||
import Data.ByteString qualified as BS
|
import Data.ByteString qualified as BS
|
||||||
import Data.Hashable
|
import Data.Hashable
|
||||||
import Lens.Micro.Platform
|
import Lens.Micro.Platform
|
||||||
|
|
||||||
import HBS2.Prelude
|
import HBS2.Prelude
|
||||||
import HBS2.Net.Auth.Credentials
|
import HBS2.Net.Auth.Credentials
|
||||||
import HBS2.Net.Proto.Types
|
|
||||||
|
|
||||||
|
|
||||||
type PingSign e = Signature (Encryption e)
|
type PingSign e = Signature (Encryption e)
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
module HBS2.Data.Types.Refs
|
module HBS2.Data.Types.Refs
|
||||||
( module HBS2.Data.Types.Refs
|
( module HBS2.Data.Types.Refs
|
||||||
, serialise
|
, serialise
|
||||||
, pattern HashLike
|
-- , pattern HashLike
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import HBS2.Base58
|
import HBS2.Base58
|
||||||
|
|
|
@ -16,8 +16,8 @@ import Data.ByteArray qualified as BA
|
||||||
import Data.ByteString (ByteString)
|
import Data.ByteString (ByteString)
|
||||||
import Data.ByteString.Char8 qualified as BS8
|
import Data.ByteString.Char8 qualified as BS8
|
||||||
import Data.ByteString.Lazy qualified as LBS
|
import Data.ByteString.Lazy qualified as LBS
|
||||||
import Data.ByteString.Short qualified as SB
|
-- import Data.ByteString.Short qualified as SB
|
||||||
import Data.ByteString.Short (ShortByteString)
|
-- import Data.ByteString.Short (ShortByteString)
|
||||||
import Data.Data
|
import Data.Data
|
||||||
import Data.Hashable (Hashable)
|
import Data.Hashable (Hashable)
|
||||||
import Data.Kind
|
import Data.Kind
|
||||||
|
@ -26,7 +26,7 @@ import Data.Text qualified as Text
|
||||||
import GHC.Generics
|
import GHC.Generics
|
||||||
import Prettyprinter
|
import Prettyprinter
|
||||||
import Text.InterpolatedString.Perl6 (qc)
|
import Text.InterpolatedString.Perl6 (qc)
|
||||||
import Control.DeepSeq (NFData,force)
|
import Control.DeepSeq (NFData)
|
||||||
|
|
||||||
data HbSync = HbSync
|
data HbSync = HbSync
|
||||||
deriving stock (Data)
|
deriving stock (Data)
|
||||||
|
|
|
@ -7,21 +7,18 @@ module HBS2.Merkle where
|
||||||
import HBS2.Prelude
|
import HBS2.Prelude
|
||||||
import HBS2.Hash
|
import HBS2.Hash
|
||||||
|
|
||||||
import Control.Applicative
|
|
||||||
import Codec.Serialise (serialise, deserialiseOrFail)
|
import Codec.Serialise (serialise, deserialiseOrFail)
|
||||||
import Data.ByteString (ByteString)
|
import Data.ByteString (ByteString)
|
||||||
import Data.ByteString qualified as BS
|
import Data.ByteString qualified as BS
|
||||||
import Data.ByteString.Lazy qualified as LBS
|
import Data.ByteString.Lazy qualified as LBS
|
||||||
import Data.Data
|
import Data.Data
|
||||||
import Data.Foldable (forM_, traverse_)
|
import Data.Foldable (traverse_)
|
||||||
import Data.List qualified as List
|
import Data.List qualified as List
|
||||||
import Data.Text (Text)
|
|
||||||
import Data.Word
|
import Data.Word
|
||||||
import GHC.Generics
|
|
||||||
import Lens.Micro.Platform
|
import Lens.Micro.Platform
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Prettyprinter
|
-- import Prettyprinter
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -210,7 +207,7 @@ walkMerkle' root flookup sink = go root
|
||||||
|
|
||||||
either (const $ runWithAnnTree hash bs) runWithTree t1
|
either (const $ runWithAnnTree hash bs) runWithTree t1
|
||||||
|
|
||||||
runWithAnnTree hash bs = do
|
runWithAnnTree _hash bs = do
|
||||||
let t = deserialiseOrFail @(MTreeAnn a) bs
|
let t = deserialiseOrFail @(MTreeAnn a) bs
|
||||||
case t of
|
case t of
|
||||||
Left{} -> pure ()
|
Left{} -> pure ()
|
||||||
|
|
|
@ -16,7 +16,7 @@ import Data.Text.Encoding qualified as TE
|
||||||
import Control.Monad.Except
|
import Control.Monad.Except
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
|
|
||||||
import UnliftIO
|
-- import UnliftIO
|
||||||
|
|
||||||
{- HLINT ignore "Functor law" -}
|
{- HLINT ignore "Functor law" -}
|
||||||
|
|
||||||
|
|
|
@ -201,7 +201,7 @@ instance ( Serialise (PeerCredentials e)
|
||||||
)
|
)
|
||||||
|
|
||||||
=> Pretty (AsBase58 (PeerCredentials e)) where
|
=> Pretty (AsBase58 (PeerCredentials e)) where
|
||||||
pretty (AsBase58 c@(PeerCredentials s p _)) = pretty $ B8.unpack (toBase58 bs)
|
pretty (AsBase58 c@(PeerCredentials _s _p _)) = pretty $ B8.unpack (toBase58 bs)
|
||||||
where
|
where
|
||||||
bs = LBS.toStrict $ serialise c
|
bs = LBS.toStrict $ serialise c
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@ import Crypto.Saltine.Class qualified as Crypto
|
||||||
import Crypto.Saltine.Class (IsEncoding(..))
|
import Crypto.Saltine.Class (IsEncoding(..))
|
||||||
import Control.Monad.Identity
|
import Control.Monad.Identity
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
import Data.ByteString.Char8 (ByteString)
|
|
||||||
import Data.ByteString.Char8 qualified as B8
|
import Data.ByteString.Char8 qualified as B8
|
||||||
import Data.ByteString.Lazy.Char8 qualified as LBS
|
import Data.ByteString.Lazy.Char8 qualified as LBS
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
|
|
|
@ -23,7 +23,7 @@ import HBS2.Net.Proto.Types
|
||||||
import HBS2.Storage hiding (Key)
|
import HBS2.Storage hiding (Key)
|
||||||
import HBS2.Storage.Operations.Class
|
import HBS2.Storage.Operations.Class
|
||||||
import HBS2.Storage.Operations.ByteString
|
import HBS2.Storage.Operations.ByteString
|
||||||
import HBS2.Storage(Storage(..))
|
-- import HBS2.Storage(Storage(..))
|
||||||
import HBS2.Defaults
|
import HBS2.Defaults
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,13 +56,14 @@ import Data.Word (Word64)
|
||||||
import Data.ByteArray()
|
import Data.ByteArray()
|
||||||
import Network.ByteOrder qualified as N
|
import Network.ByteOrder qualified as N
|
||||||
import Streaming.Prelude qualified as S
|
import Streaming.Prelude qualified as S
|
||||||
import Lens.Micro.Platform
|
-- import Lens.Micro.Platform
|
||||||
import Data.Coerce
|
import Data.Coerce
|
||||||
import Data.Typeable (TypeRep, typeRep)
|
-- import Data.Typeable (TypeRep, typeRep)
|
||||||
import Type.Reflection (SomeTypeRep(..), someTypeRep)
|
-- import Type.Reflection (SomeTypeRep(..), someTypeRep)
|
||||||
|
import Type.Reflection ()
|
||||||
|
|
||||||
import Streaming qualified as S
|
-- import Streaming qualified as S
|
||||||
import Streaming (Stream(..), Of(..))
|
import Streaming (Stream, Of(..))
|
||||||
|
|
||||||
import System.IO.Unsafe (unsafePerformIO)
|
import System.IO.Unsafe (unsafePerformIO)
|
||||||
|
|
||||||
|
@ -197,7 +198,7 @@ instance (ForGroupKeySymm s) => Serialise (GroupKey 'Symm s) where
|
||||||
let compatEncoded = Serialise.encode compat
|
let compatEncoded = Serialise.encode compat
|
||||||
let version = 2
|
let version = 2
|
||||||
let ext = (getGroupKeyIdScheme x, getGroupKeyId x, getGroupKeyTimestamp x)
|
let ext = (getGroupKeyIdScheme x, getGroupKeyId x, getGroupKeyTimestamp x)
|
||||||
compatEncoded <> Serialise.encode version <> Serialise.encode ext
|
compatEncoded <> Serialise.encode (version :: Integer) <> Serialise.encode ext
|
||||||
|
|
||||||
decode = do
|
decode = do
|
||||||
GroupKeySymmV1{..} <- Serialise.decode @(GroupKeySymmV1 s)
|
GroupKeySymmV1{..} <- Serialise.decode @(GroupKeySymmV1 s)
|
||||||
|
|
|
@ -12,8 +12,6 @@ import HBS2.Net.Proto.Types
|
||||||
import HBS2.Hash
|
import HBS2.Hash
|
||||||
import HBS2.Net.Messaging.Unix
|
import HBS2.Net.Messaging.Unix
|
||||||
|
|
||||||
import Data.Config.Suckless
|
|
||||||
|
|
||||||
import Data.Word
|
import Data.Word
|
||||||
import Crypto.Error
|
import Crypto.Error
|
||||||
import Crypto.PubKey.Ed25519 qualified as Ed
|
import Crypto.PubKey.Ed25519 qualified as Ed
|
||||||
|
|
|
@ -16,8 +16,6 @@ import Control.Monad
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
import Data.Attoparsec.Text as Atto
|
import Data.Attoparsec.Text as Atto
|
||||||
import Data.Char
|
import Data.Char
|
||||||
import Data.Function
|
|
||||||
import Data.Functor
|
|
||||||
import Data.IP
|
import Data.IP
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Text qualified as Text
|
import Data.Text qualified as Text
|
||||||
|
@ -75,9 +73,9 @@ instance FromStringMaybe (IPAddrPort e) where
|
||||||
po = snd <$> hp
|
po = snd <$> hp
|
||||||
|
|
||||||
getHostPort :: Text -> Maybe (String, PortNumber)
|
getHostPort :: Text -> Maybe (String, PortNumber)
|
||||||
getHostPort s = parseOnly p s & either (const Nothing) Just
|
getHostPort s = parseOnly p' s & either (const Nothing) Just
|
||||||
where
|
where
|
||||||
p = do
|
p' = do
|
||||||
(h, p) <- pAddr <|> tcppAddr
|
(h, p) <- pAddr <|> tcppAddr
|
||||||
pure (Text.unpack h, read (Text.unpack p))
|
pure (Text.unpack h, read (Text.unpack p))
|
||||||
|
|
||||||
|
@ -129,8 +127,8 @@ pIP4 = do
|
||||||
|
|
||||||
hostAddr0 <- replicateM 3 $ do
|
hostAddr0 <- replicateM 3 $ do
|
||||||
n <- Atto.takeWhile isDigit
|
n <- Atto.takeWhile isDigit
|
||||||
dot <- string "."
|
cdot <- string "."
|
||||||
pure ( n <> dot )
|
pure ( n <> cdot )
|
||||||
|
|
||||||
hostAddr1 <- Atto.takeWhile isDigit
|
hostAddr1 <- Atto.takeWhile isDigit
|
||||||
|
|
||||||
|
@ -150,6 +148,6 @@ pHostName = do
|
||||||
void $ char ':'
|
void $ char ':'
|
||||||
port <- decimal
|
port <- decimal
|
||||||
let host = if Text.null host' then "localhost" else host'
|
let host = if Text.null host' then "localhost" else host'
|
||||||
pure (host, Text.pack (show port))
|
pure (host, Text.pack (show (port :: Integer)))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,6 @@ module HBS2.Net.Messaging.Encrypted.ByPass
|
||||||
|
|
||||||
import HBS2.Prelude
|
import HBS2.Prelude
|
||||||
import HBS2.Hash
|
import HBS2.Hash
|
||||||
import HBS2.Clock hiding (sec)
|
|
||||||
import HBS2.Net.Messaging
|
import HBS2.Net.Messaging
|
||||||
import HBS2.Data.Types.SignedBox
|
import HBS2.Data.Types.SignedBox
|
||||||
import HBS2.Net.Auth.Credentials()
|
import HBS2.Net.Auth.Credentials()
|
||||||
|
@ -40,7 +39,6 @@ import Data.HashMap.Strict (HashMap)
|
||||||
import Data.HashMap.Strict qualified as HashMap
|
import Data.HashMap.Strict qualified as HashMap
|
||||||
import Data.HashSet qualified as HashSet
|
import Data.HashSet qualified as HashSet
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Time.Clock.POSIX
|
|
||||||
import Data.Word
|
import Data.Word
|
||||||
import System.Random
|
import System.Random
|
||||||
import System.IO.Unsafe (unsafePerformIO)
|
import System.IO.Unsafe (unsafePerformIO)
|
||||||
|
@ -317,7 +315,7 @@ instance (ForByPass e, Messaging w e ByteString)
|
||||||
when (isNothing mbx) do
|
when (isNothing mbx) do
|
||||||
debug $ "HEY: failed to unbox" <+> pretty heyNonceA <+> pretty orig
|
debug $ "HEY: failed to unbox" <+> pretty heyNonceA <+> pretty orig
|
||||||
|
|
||||||
n <- toMPlus mbx
|
_n <- toMPlus mbx
|
||||||
|
|
||||||
(pks, HEYBox t puk) <- toMPlus mbx
|
(pks, HEYBox t puk) <- toMPlus mbx
|
||||||
|
|
||||||
|
|
|
@ -11,9 +11,9 @@ module HBS2.Net.Messaging.Encrypted.RandomPrefix
|
||||||
import Data.Word
|
import Data.Word
|
||||||
import Data.Bits
|
import Data.Bits
|
||||||
-- import Data.ByteString (ByteString)
|
-- import Data.ByteString (ByteString)
|
||||||
import Data.ByteString qualified as BS
|
|
||||||
import Data.ByteString.Lazy qualified as LBS
|
import Data.ByteString.Lazy qualified as LBS
|
||||||
import Data.ByteString.Lazy (ByteString)
|
import Data.ByteString.Lazy (ByteString)
|
||||||
|
import Control.Monad
|
||||||
import Control.Monad.State
|
import Control.Monad.State
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
import Data.ByteString.Builder
|
import Data.ByteString.Builder
|
||||||
|
@ -52,7 +52,7 @@ instance Instruction a => Emittable (Proxy a) where
|
||||||
emit _ = word8 . fromIntegral $ natVal (Proxy @(Opcode a))
|
emit _ = word8 . fromIntegral $ natVal (Proxy @(Opcode a))
|
||||||
|
|
||||||
instance Emittable OP where
|
instance Emittable OP where
|
||||||
emit (OP op arg) = emit op <> emit arg
|
emit (OP o arg) = emit o <> emit arg
|
||||||
emit (BYTE w) = word8 w
|
emit (BYTE w) = word8 w
|
||||||
|
|
||||||
instance Emittable () where
|
instance Emittable () where
|
||||||
|
@ -192,7 +192,7 @@ runCodeLazy s = runState (execStateT (runMaybeT (go s)) Nothing) s
|
||||||
put (Just n)
|
put (Just n)
|
||||||
pure rest
|
pure rest
|
||||||
|
|
||||||
repeatN bs = do
|
_repeatN bs = do
|
||||||
(n, rest) <- next bs
|
(n, rest) <- next bs
|
||||||
|
|
||||||
rest' <- replicateM (min 16 (fromIntegral n)) $ do
|
rest' <- replicateM (min 16 (fromIntegral n)) $ do
|
||||||
|
@ -223,7 +223,7 @@ instance MonadIO m => RandomPrefix PrefixMethod1 m where
|
||||||
|
|
||||||
randomPrefix (PrefixMethod1 k a x) = liftIO do
|
randomPrefix (PrefixMethod1 k a x) = liftIO do
|
||||||
let nums = partsMethod1 k a x
|
let nums = partsMethod1 k a x
|
||||||
me <- liftIO $ replicateM (length nums) $ randomRIO (0,2)
|
me <- liftIO $ replicateM (length nums) $ randomRIO (0,2 :: Integer)
|
||||||
opcodes <- forM (zip me nums) $ \z@(_, n) ->
|
opcodes <- forM (zip me nums) $ \z@(_, n) ->
|
||||||
case fst z of
|
case fst z of
|
||||||
1 -> do
|
1 -> do
|
||||||
|
|
|
@ -31,6 +31,8 @@ newFakeP2P :: (Eq (Peer peer), Hashable (Peer peer)) => Bool -> IO (FakeP2P peer
|
||||||
newFakeP2P block =
|
newFakeP2P block =
|
||||||
FakeP2P block <$> newTVarIO mempty
|
FakeP2P block <$> newTVarIO mempty
|
||||||
|
|
||||||
|
getChan :: (Hashable (Peer proto)) =>
|
||||||
|
FakeP2P proto msg -> Peer proto -> IO (TChan (From proto, msg))
|
||||||
getChan bus whom = do
|
getChan bus whom = do
|
||||||
ch <- newTChanIO
|
ch <- newTChanIO
|
||||||
atomically $ stateTVar t (alter ch)
|
atomically $ stateTVar t (alter ch)
|
||||||
|
@ -45,7 +47,7 @@ instance ( (HasPeer proto, Hashable (Peer proto))
|
||||||
) => Messaging (FakeP2P proto msg) proto msg where
|
) => Messaging (FakeP2P proto msg) proto msg where
|
||||||
|
|
||||||
sendTo bus (To whom) who msg = liftIO do
|
sendTo bus (To whom) who msg = liftIO do
|
||||||
ch <- newTChanIO
|
_ch <- newTChanIO
|
||||||
chan <- getChan bus whom
|
chan <- getChan bus whom
|
||||||
atomically $ Chan.writeTChan chan (who, msg)
|
atomically $ Chan.writeTChan chan (who, msg)
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ import HBS2.Actors.Peer.Types
|
||||||
import HBS2.Net.Messaging
|
import HBS2.Net.Messaging
|
||||||
|
|
||||||
import Control.Concurrent.STM qualified as STM
|
import Control.Concurrent.STM qualified as STM
|
||||||
|
import Control.Monad.Fix
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Data.ByteString.Builder qualified as B
|
import Data.ByteString.Builder qualified as B
|
||||||
import Data.ByteString.Lazy (ByteString)
|
import Data.ByteString.Lazy (ByteString)
|
||||||
|
@ -49,7 +50,7 @@ newMessagingPipe (pIn,pOut) = do
|
||||||
<$> newTQueueIO
|
<$> newTQueueIO
|
||||||
|
|
||||||
instance Hashable PipeAddr where
|
instance Hashable PipeAddr where
|
||||||
hashWithSalt salt (PipeAddr pip) = hashWithSalt salt ("pipe-addr", fd)
|
hashWithSalt salt (PipeAddr pip) = hashWithSalt salt ("pipe-addr" :: String, fd)
|
||||||
where
|
where
|
||||||
fd = unsafePerformIO (handleToFd pip <&> fromIntegral @_ @Word)
|
fd = unsafePerformIO (handleToFd pip <&> fromIntegral @_ @Word)
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,9 @@ module HBS2.Net.Messaging.Stream where
|
||||||
|
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
|
|
||||||
import Data.Function
|
import Control.Exception (Exception,throwIO)
|
||||||
import Control.Exception (try,Exception,SomeException,throwIO)
|
|
||||||
import Data.ByteString.Lazy (ByteString)
|
import Data.ByteString.Lazy (ByteString)
|
||||||
import Data.ByteString.Lazy qualified as LBS
|
import Data.ByteString.Lazy qualified as LBS
|
||||||
import Data.Typeable
|
|
||||||
import Network.Socket hiding (listen,connect)
|
import Network.Socket hiding (listen,connect)
|
||||||
import Streaming.Prelude qualified as S
|
import Streaming.Prelude qualified as S
|
||||||
import Data.ByteString qualified as BS
|
import Data.ByteString qualified as BS
|
||||||
|
|
|
@ -89,8 +89,8 @@ newMessagingTCP pa = liftIO do
|
||||||
|
|
||||||
instance Messaging MessagingTCP L4Proto ByteString where
|
instance Messaging MessagingTCP L4Proto ByteString where
|
||||||
|
|
||||||
sendTo bus (To p) (From f) msg = liftIO do
|
sendTo bus (To p) (From _f) msg = liftIO do
|
||||||
let own = view tcpOwnPeer bus
|
let _own = view tcpOwnPeer bus
|
||||||
|
|
||||||
co' <- atomically $ readTVar (view tcpPeerConn bus) <&> HashMap.lookup p
|
co' <- atomically $ readTVar (view tcpPeerConn bus) <&> HashMap.lookup p
|
||||||
|
|
||||||
|
@ -369,7 +369,7 @@ runMessagingTCP env = liftIO do
|
||||||
now <- getTimeCoarse
|
now <- getTimeCoarse
|
||||||
|
|
||||||
-- FIXME: time-hardcode-again
|
-- FIXME: time-hardcode-again
|
||||||
let expire = filter (\e -> (realToFrac (toNanoSecs (now - fst e)) / 1e9) < 30)
|
let expire = filter (\e -> (realToFrac (toNanoSecs (now - fst e)) / (1e9 :: Double)) < 30)
|
||||||
atomically $ modifyTVar defs
|
atomically $ modifyTVar defs
|
||||||
$ HashMap.mapMaybe
|
$ HashMap.mapMaybe
|
||||||
$ \es -> let rs = expire es
|
$ \es -> let rs = expire es
|
||||||
|
|
|
@ -5,10 +5,10 @@ import HBS2.Clock
|
||||||
import HBS2.Defaults
|
import HBS2.Defaults
|
||||||
import HBS2.Net.IP.Addr
|
import HBS2.Net.IP.Addr
|
||||||
import HBS2.Net.Messaging
|
import HBS2.Net.Messaging
|
||||||
import HBS2.Net.Proto
|
-- import HBS2.Net.Proto
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
-- import HBS2.System.Logger.Simple
|
||||||
|
|
||||||
import Data.Function
|
import Data.Function
|
||||||
import Control.Exception
|
import Control.Exception
|
||||||
|
@ -19,7 +19,6 @@ import Control.Concurrent.STM.TQueue qualified as Q0
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Data.ByteString.Lazy (ByteString)
|
import Data.ByteString.Lazy (ByteString)
|
||||||
import Data.ByteString.Lazy qualified as LBS
|
import Data.ByteString.Lazy qualified as LBS
|
||||||
import Data.Functor
|
|
||||||
import Data.List qualified as L
|
import Data.List qualified as L
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
-- import Data.Text (Text)
|
-- import Data.Text (Text)
|
||||||
|
@ -100,7 +99,7 @@ newMessagingUDP reuse saddr =
|
||||||
)
|
)
|
||||||
|
|
||||||
where
|
where
|
||||||
sorted = L.sortBy ( compare `on` proto)
|
sorted = L.sortBy ( compare @Integer `on` proto)
|
||||||
proto x = case addrAddress x of
|
proto x = case addrAddress x of
|
||||||
SockAddrInet{} -> 0
|
SockAddrInet{} -> 0
|
||||||
SockAddrInet6{} -> 1
|
SockAddrInet6{} -> 1
|
||||||
|
|
|
@ -12,11 +12,11 @@ import HBS2.Net.Proto.Types
|
||||||
import HBS2.Actors.Peer.Types
|
import HBS2.Actors.Peer.Types
|
||||||
import HBS2.Net.Messaging
|
import HBS2.Net.Messaging
|
||||||
import HBS2.Net.Messaging.Stream
|
import HBS2.Net.Messaging.Stream
|
||||||
import HBS2.Clock
|
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
import HBS2.System.Logger.Simple
|
||||||
|
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
|
import Control.Monad.Fix
|
||||||
import Control.Monad.Reader hiding (reader)
|
import Control.Monad.Reader hiding (reader)
|
||||||
import Data.ByteString.Lazy (ByteString)
|
import Data.ByteString.Lazy (ByteString)
|
||||||
import Data.ByteString.Lazy qualified as LBS
|
import Data.ByteString.Lazy qualified as LBS
|
||||||
|
@ -34,10 +34,6 @@ import Lens.Micro.Platform
|
||||||
import Control.Monad.Trans.Cont
|
import Control.Monad.Trans.Cont
|
||||||
import UnliftIO
|
import UnliftIO
|
||||||
|
|
||||||
import Streaming.Prelude qualified as S
|
|
||||||
|
|
||||||
import Control.Concurrent (myThreadId)
|
|
||||||
|
|
||||||
data UNIX = UNIX
|
data UNIX = UNIX
|
||||||
deriving (Eq,Ord,Show,Generic)
|
deriving (Eq,Ord,Show,Generic)
|
||||||
|
|
||||||
|
@ -170,7 +166,7 @@ runMessagingUnix env = do
|
||||||
liftIO $ listen sock 5
|
liftIO $ listen sock 5
|
||||||
|
|
||||||
forever do
|
forever do
|
||||||
(so, sa) <- liftIO $ accept sock
|
(so, _sa) <- liftIO $ accept sock
|
||||||
|
|
||||||
withSession $ flip runContT void do
|
withSession $ flip runContT void do
|
||||||
|
|
||||||
|
@ -193,7 +189,7 @@ runMessagingUnix env = do
|
||||||
msg <- liftIO . atomically $ readTQueue q
|
msg <- liftIO . atomically $ readTQueue q
|
||||||
|
|
||||||
let len = fromIntegral $ LBS.length msg :: Int
|
let len = fromIntegral $ LBS.length msg :: Int
|
||||||
let bs = bytestring32 (fromIntegral len)
|
let _bs = bytestring32 (fromIntegral len)
|
||||||
|
|
||||||
liftIO $ sendAll so $ bytestring32 (fromIntegral len)
|
liftIO $ sendAll so $ bytestring32 (fromIntegral len)
|
||||||
|
|
||||||
|
@ -398,7 +394,7 @@ createQueues env who = liftIO do
|
||||||
|
|
||||||
instance Messaging MessagingUnix UNIX ByteString where
|
instance Messaging MessagingUnix UNIX ByteString where
|
||||||
|
|
||||||
sendTo bus (To who) (From me) msg = liftIO do
|
sendTo bus (To who) (From _me) msg = liftIO do
|
||||||
|
|
||||||
-- createQueues bus who
|
-- createQueues bus who
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
{-# OPTIONS_GHC -fno-warn-unused-top-binds #-}
|
||||||
module HBS2.Net.PeerLocator.Static
|
module HBS2.Net.PeerLocator.Static
|
||||||
( StaticPeerLocator
|
( StaticPeerLocator
|
||||||
, newStaticPeerLocator
|
, newStaticPeerLocator
|
||||||
|
|
|
@ -23,7 +23,6 @@ import Control.Concurrent.STM (flushTQueue)
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Either
|
import Data.Either
|
||||||
import UnliftIO
|
import UnliftIO
|
||||||
import System.IO (hPrint)
|
|
||||||
|
|
||||||
|
|
||||||
instance (HasProtocol UNIX (NotifyProto ev0 UNIX)) => HasTimeLimits UNIX (NotifyProto ev0 UNIX) IO where
|
instance (HasProtocol UNIX (NotifyProto ev0 UNIX)) => HasTimeLimits UNIX (NotifyProto ev0 UNIX) IO where
|
||||||
|
@ -165,7 +164,7 @@ runNotifyWorkerServer env = do
|
||||||
|
|
||||||
-- FIXNE: timeout-hardcode
|
-- FIXNE: timeout-hardcode
|
||||||
let tmo = 60
|
let tmo = 60
|
||||||
let tnano = round $ realToFrac tmo * 1e9
|
let tnano = round $ realToFrac tmo * (1e9 :: Double)
|
||||||
|
|
||||||
cleanup <- async $ forever do
|
cleanup <- async $ forever do
|
||||||
|
|
||||||
|
@ -324,7 +323,7 @@ makeNotifyClient sink what = do
|
||||||
pure w
|
pure w
|
||||||
|
|
||||||
forM_ waiter $ \wa -> do
|
forM_ waiter $ \wa -> do
|
||||||
r <- try @_ @SomeException $ atomically $ writeTQueue wa ha
|
_r <- try @_ @SomeException $ atomically $ writeTQueue wa ha
|
||||||
debug $ "NOTIFY CLIENT SUBSCRIBED" <+> viaShow rn
|
debug $ "NOTIFY CLIENT SUBSCRIBED" <+> viaShow rn
|
||||||
|
|
||||||
NotifyBye ha -> do
|
NotifyBye ha -> do
|
||||||
|
|
|
@ -13,13 +13,14 @@ import HBS2.Net.Proto.Types
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
|
|
||||||
import Codec.Serialise
|
import Codec.Serialise
|
||||||
|
import Control.Monad
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Control.Monad.Trans.Resource
|
import Control.Monad.Trans.Resource
|
||||||
import Data.ByteString.Lazy (ByteString)
|
import Data.ByteString.Lazy (ByteString)
|
||||||
import Data.Kind
|
import Data.Kind
|
||||||
import Data.List qualified as List
|
import Data.List qualified as List
|
||||||
import GHC.TypeLits
|
import GHC.TypeLits
|
||||||
import Lens.Micro.Platform
|
-- import Lens.Micro.Platform
|
||||||
import UnliftIO.Async
|
import UnliftIO.Async
|
||||||
import UnliftIO qualified as UIO
|
import UnliftIO qualified as UIO
|
||||||
import UnliftIO (TVar,TQueue,atomically)
|
import UnliftIO (TVar,TQueue,atomically)
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
module HBS2.Net.Proto.Sessions where
|
module HBS2.Net.Proto.Sessions where
|
||||||
|
|
||||||
import HBS2.Net.Proto.Types
|
|
||||||
|
|
||||||
import Data.Typeable
|
import Data.Typeable
|
||||||
import Data.Dynamic
|
import Data.Dynamic
|
||||||
import Data.Hashable
|
import Data.Hashable
|
||||||
|
@ -27,7 +25,7 @@ instance Hashable SKey where
|
||||||
|
|
||||||
|
|
||||||
instance Eq SKey where
|
instance Eq SKey where
|
||||||
(==) (SKey p1 ty1 a) (SKey p2 ty2 b) = ty1 == ty2 && unKey p1 a == unKey p1 b
|
(==) (SKey p1 ty1 a) (SKey _p2 ty2 b) = ty1 == ty2 && unKey p1 a == unKey p1 b
|
||||||
|
|
||||||
|
|
||||||
data family SessionKey e p :: Type
|
data family SessionKey e p :: Type
|
||||||
|
|
|
@ -68,7 +68,7 @@ data L4Proto = UDP | TCP
|
||||||
deriving stock (Enum,Bounded)
|
deriving stock (Enum,Bounded)
|
||||||
|
|
||||||
instance Hashable L4Proto where
|
instance Hashable L4Proto where
|
||||||
hashWithSalt s l = hashWithSalt s ("l4proto", fromEnum l)
|
hashWithSalt s l = hashWithSalt s ("l4proto" :: String, fromEnum l)
|
||||||
|
|
||||||
instance Show L4Proto where
|
instance Show L4Proto where
|
||||||
show UDP = "udp"
|
show UDP = "udp"
|
||||||
|
@ -177,9 +177,9 @@ instance AddrPriority (Peer L4Proto) where
|
||||||
|
|
||||||
instance Hashable (Peer L4Proto) where
|
instance Hashable (Peer L4Proto) where
|
||||||
hashWithSalt salt p = case _sockAddr p of
|
hashWithSalt salt p = case _sockAddr p of
|
||||||
SockAddrInet pn h -> hashWithSalt salt (4, fromEnum (_sockType p), fromIntegral pn, h)
|
SockAddrInet pn h -> hashWithSalt salt (4 :: Int, fromEnum (_sockType p), fromIntegral pn :: Integer, h)
|
||||||
SockAddrInet6 pn _ h _ -> hashWithSalt salt (6, fromEnum (_sockType p), fromIntegral pn, h)
|
SockAddrInet6 pn _ h _ -> hashWithSalt salt (6 :: Int, fromEnum (_sockType p), fromIntegral pn :: Integer, h)
|
||||||
SockAddrUnix s -> hashWithSalt salt ("unix", s)
|
SockAddrUnix s -> hashWithSalt salt ("unix" :: String, s)
|
||||||
|
|
||||||
-- FIXME: support-udp-prefix
|
-- FIXME: support-udp-prefix
|
||||||
instance Pretty (Peer L4Proto) where
|
instance Pretty (Peer L4Proto) where
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
module HBS2.Polling where
|
module HBS2.Polling where
|
||||||
|
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.Clock
|
|
||||||
|
|
||||||
import Data.Heap (Entry(..))
|
import Data.Heap (Entry(..))
|
||||||
import Data.Heap qualified as Heap
|
import Data.Heap qualified as Heap
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{-# Language FunctionalDependencies #-}
|
{-# Language FunctionalDependencies #-}
|
||||||
{-# Language PatternSynonyms #-}
|
{-# Language PatternSynonyms #-}
|
||||||
{-# Language ViewPatterns #-}
|
{-# Language ViewPatterns #-}
|
||||||
|
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
||||||
module HBS2.Prelude
|
module HBS2.Prelude
|
||||||
( module Data.String
|
( module Data.String
|
||||||
, module Safe
|
, module Safe
|
||||||
|
@ -37,6 +38,9 @@ import GHC.Generics as X (Generic)
|
||||||
import Data.ByteString (ByteString)
|
import Data.ByteString (ByteString)
|
||||||
import Data.String (IsString(..))
|
import Data.String (IsString(..))
|
||||||
import Safe
|
import Safe
|
||||||
|
import Control.Monad as X
|
||||||
|
import Control.Monad.Fix as X
|
||||||
|
import Control.Monad.Trans (lift)
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@ module HBS2.Prelude.Plated
|
||||||
, module HBS2.Prelude
|
, module HBS2.Prelude
|
||||||
, module Data.Data
|
, module Data.Data
|
||||||
, module Data.Generics.Uniplate.Operations
|
, module Data.Generics.Uniplate.Operations
|
||||||
, Generic
|
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.Data
|
import Data.Data
|
||||||
|
|
|
@ -8,7 +8,6 @@ module HBS2.ScheduledAction
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.Clock
|
|
||||||
|
|
||||||
import Prelude hiding (all)
|
import Prelude hiding (all)
|
||||||
import Data.Word
|
import Data.Word
|
||||||
|
@ -54,15 +53,15 @@ runScheduled :: MonadUnliftIO m => Scheduled -> m ()
|
||||||
runScheduled sch = forever do
|
runScheduled sch = forever do
|
||||||
pause (view scheduleRunPeriod sch)
|
pause (view scheduleRunPeriod sch)
|
||||||
|
|
||||||
now <- getTimeCoarse <&> toNanoSecs <&> (/1e9) . realToFrac <&> round
|
now <- getTimeCoarse <&> toNanoSecs <&> (/ (1e9 :: Double)) . realToFrac <&> round
|
||||||
|
|
||||||
expired <- atomically do
|
expireds <- atomically do
|
||||||
all <- readTVar (slots sch) <&> HashMap.toList
|
all <- readTVar (slots sch) <&> HashMap.toList
|
||||||
let (rest, expired) = List.partition ( (>now) . fst) all
|
let (rest, expireds) = List.partition ( (>now) . fst) all
|
||||||
writeTVar (slots sch) (HashMap.fromList rest)
|
writeTVar (slots sch) (HashMap.fromList rest)
|
||||||
pure expired
|
pure expireds
|
||||||
|
|
||||||
for_ expired $ \(_, all) -> do
|
for_ expireds $ \(_, all) -> do
|
||||||
for_ all $ \action -> do
|
for_ all $ \action -> do
|
||||||
-- TODO: error-logging-maybe
|
-- TODO: error-logging-maybe
|
||||||
liftIO $ void $ action `E.catch` (\(_ :: E.ArithException) -> pure ())
|
liftIO $ void $ action `E.catch` (\(_ :: E.ArithException) -> pure ())
|
||||||
|
@ -71,7 +70,7 @@ runScheduled sch = forever do
|
||||||
|
|
||||||
schedule :: forall a m . (MonadUnliftIO m, Integral a) => Scheduled -> a -> IO () -> m ()
|
schedule :: forall a m . (MonadUnliftIO m, Integral a) => Scheduled -> a -> IO () -> m ()
|
||||||
schedule s ttl what = do
|
schedule s ttl what = do
|
||||||
now <- getTimeCoarse <&> toNanoSecs <&> (/1e9) . realToFrac <&> round
|
now <- getTimeCoarse <&> toNanoSecs <&> (/ (1e9 :: Double)) . realToFrac <&> round
|
||||||
let slot = now + fromIntegral ttl
|
let slot = now + fromIntegral ttl
|
||||||
atomically $ modifyTVar (slots s) (HashMap.insertWith (<>) slot [what])
|
atomically $ modifyTVar (slots s) (HashMap.insertWith (<>) slot [what])
|
||||||
|
|
||||||
|
|
|
@ -17,12 +17,11 @@ import HBS2.Storage.Operations.Class
|
||||||
import HBS2.Defaults
|
import HBS2.Defaults
|
||||||
|
|
||||||
import Streaming.Prelude qualified as S
|
import Streaming.Prelude qualified as S
|
||||||
import Streaming qualified as S
|
|
||||||
import Data.Function
|
import Data.Function
|
||||||
|
|
||||||
|
import Control.Monad
|
||||||
import Control.Monad.Except
|
import Control.Monad.Except
|
||||||
import Control.Exception
|
import Control.Exception
|
||||||
import Data.Bifunctor
|
|
||||||
import Data.ByteString.Lazy (ByteString)
|
import Data.ByteString.Lazy (ByteString)
|
||||||
import Data.ByteString.Lazy qualified as LBS
|
import Data.ByteString.Lazy qualified as LBS
|
||||||
-- hbs2-core/lib/HBS2/Net/Auth/Credentials.hs
|
-- hbs2-core/lib/HBS2/Net/Auth/Credentials.hs
|
||||||
|
|
|
@ -7,10 +7,10 @@ import HBS2.Hash
|
||||||
import HBS2.Merkle
|
import HBS2.Merkle
|
||||||
import HBS2.Storage
|
import HBS2.Storage
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
-- import HBS2.System.Logger.Simple
|
||||||
|
|
||||||
import Streaming.Prelude qualified as S
|
import Streaming.Prelude qualified as S
|
||||||
import Streaming.Prelude (Stream(..), Of(..))
|
import Streaming.Prelude (Stream, Of(..))
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
|
|
|
@ -41,8 +41,6 @@ import Data.Map (Map)
|
||||||
import Data.Map.Strict qualified as Map
|
import Data.Map.Strict qualified as Map
|
||||||
import Control.Concurrent.STM
|
import Control.Concurrent.STM
|
||||||
|
|
||||||
import Prettyprinter.Render.Terminal
|
|
||||||
|
|
||||||
data LoggerType = LoggerStdout
|
data LoggerType = LoggerStdout
|
||||||
| LoggerStderr
|
| LoggerStderr
|
||||||
| LoggerFile FilePath
|
| LoggerFile FilePath
|
||||||
|
|
|
@ -13,6 +13,7 @@ import HBS2.Net.Auth.GroupKeySymm as Symm
|
||||||
|
|
||||||
import HBS2.System.Dir
|
import HBS2.System.Dir
|
||||||
|
|
||||||
|
import Control.Monad
|
||||||
import Control.Monad.Cont
|
import Control.Monad.Cont
|
||||||
import DBPipe.SQLite
|
import DBPipe.SQLite
|
||||||
import Text.InterpolatedString.Perl6 (qc)
|
import Text.InterpolatedString.Perl6 (qc)
|
||||||
|
|
|
@ -122,6 +122,7 @@ import Control.Monad.Trans.Resource
|
||||||
import Streaming.Prelude qualified as S
|
import Streaming.Prelude qualified as S
|
||||||
|
|
||||||
import Graphics.Vty qualified as Vty
|
import Graphics.Vty qualified as Vty
|
||||||
|
import Graphics.Vty.Platform.Unix qualified as Vty
|
||||||
|
|
||||||
data GoAgainException = GoAgainException
|
data GoAgainException = GoAgainException
|
||||||
deriving (Eq,Ord,Show,Typeable)
|
deriving (Eq,Ord,Show,Typeable)
|
||||||
|
@ -342,7 +343,7 @@ runCLI = do
|
||||||
|
|
||||||
liftIO do
|
liftIO do
|
||||||
when pro $ flip runContT pure do
|
when pro $ flip runContT pure do
|
||||||
cfg <- liftIO $ Vty.standardIOConfig
|
cfg <- pure $ Vty.defaultConfig
|
||||||
vty <- ContT $ bracket (Vty.mkVty cfg) Vty.shutdown
|
vty <- ContT $ bracket (Vty.mkVty cfg) Vty.shutdown
|
||||||
|
|
||||||
fix \next -> do
|
fix \next -> do
|
||||||
|
|
|
@ -286,6 +286,7 @@ executable hbs2-peer
|
||||||
|
|
||||||
-- other-extensions:
|
-- other-extensions:
|
||||||
build-depends: base, hbs2-peer, hbs2-keyman-direct-lib, vty
|
build-depends: base, hbs2-peer, hbs2-keyman-direct-lib, vty
|
||||||
|
, vty-unix
|
||||||
|
|
||||||
hs-source-dirs: app
|
hs-source-dirs: app
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,8 @@ import HBS2.Peer.Proto.RefChan.Types
|
||||||
import HBS2.System.Logger.Simple
|
import HBS2.System.Logger.Simple
|
||||||
|
|
||||||
import Codec.Serialise
|
import Codec.Serialise
|
||||||
|
import Control.Monad
|
||||||
|
import Control.Monad.Fix
|
||||||
import Control.Monad.Identity
|
import Control.Monad.Identity
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
import Data.ByteString (ByteString)
|
import Data.ByteString (ByteString)
|
||||||
|
|
|
@ -20,6 +20,7 @@ import Data.Config.Suckless.Syntax
|
||||||
import Data.Config.Suckless.Parse
|
import Data.Config.Suckless.Parse
|
||||||
|
|
||||||
import Data.Kind
|
import Data.Kind
|
||||||
|
import Control.Monad
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Data.ByteString ( ByteString )
|
import Data.ByteString ( ByteString )
|
||||||
import UnliftIO
|
import UnliftIO
|
||||||
|
|
|
@ -51,7 +51,9 @@ import Data.Vector qualified as V
|
||||||
import Codec.Serialise
|
import Codec.Serialise
|
||||||
import GHC.Generics
|
import GHC.Generics
|
||||||
import Lens.Micro.Platform
|
import Lens.Micro.Platform
|
||||||
|
import Control.Monad
|
||||||
import Control.Monad.Except
|
import Control.Monad.Except
|
||||||
|
import Control.Monad.Trans
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
import UnliftIO
|
import UnliftIO
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ import HBS2.System.Logger.Simple
|
||||||
import Control.Concurrent.Async
|
import Control.Concurrent.Async
|
||||||
import Control.Exception
|
import Control.Exception
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
|
import Control.Monad.Fix
|
||||||
import Control.Monad.Except
|
import Control.Monad.Except
|
||||||
import Control.Monad.Trans.Maybe
|
import Control.Monad.Trans.Maybe
|
||||||
import Data.ByteString.Lazy qualified as LBS
|
import Data.ByteString.Lazy qualified as LBS
|
||||||
|
|
Loading…
Reference in New Issue