I hereby claim:
- I am taksuyu on github.
- I am taksuyu (https://keybase.io/taksuyu) on keybase.
- I have a public key whose fingerprint is 4203 F782 E8E2 2D58 F700 5F90 0349 1013 C1D8 2C8E
To claim this, I am signing this object:
I hereby claim:
To claim this, I am signing this object:
I'll be going over many of the basics of Mahjong, but if you are looking for something visual and quick to get you up to speed I recommend http://www.japanesemahjong.com/reachmahjong/intro.htm as it does a good job explaining the basics. Quick note though, I use different names for the groups of tiles as those are how I learned them and many variants and cultures have different names and explanations. I could go over the history of the game and all the culture behind it, but I feel that is beyond the scope of this explanation.
Some basic properties of Tiles
-- | Basic functions of a Tile. Minimum completion is `honor` and `terminal`.
class Tileable a where
suit :: a -> Bool
I tend to focus on core concepts quite a bit more than actual examples, so that the fundamental understanding of what the examples are trying to teach me is building on skills I already have just haven't figured out how to use yet.
tl;dr Your mileage may vary. I learn kind of counterintuitively for others.
Since this seemed to be popular, I decided to make a repository for content about haskell topics that you can find here new materials for lens will be put here
.PHONY: MPD TEAMSPEAK clean | |
LIBMPDCLIENT_INCLUDEDIR = libmpdclient/include | |
LIBMPDCLIENT_HEADERDIR = $(LIBMPDCLIENT_INCLUDEDIR)/mpd | |
LIBMPDCLIENT_HEADERS := client.h async.h | |
LIBMPDCLIENT_OUTPUTDIR = src/mpd | |
TS3SDK_INCLUDEDIR = ts3_sdk/include | |
TS3SDK_HEADERDIR = $(TS3SDK_INCLUDEDIR)/teamspeak | |
TS3SDK_HEADERS := clientlib.h |
-- | When dealing with multiple sets, you can have different | |
-- constraints. This can be observed in Mahjong where Suits will have | |
-- nine different values, but honors will vary. Wind and Dragon for | |
-- example have four and three values respectfully. They also don't | |
-- fit in with Bounded because these concepts exist together at the | |
-- same time and need to be handled differently. In many circumstances | |
-- you can define `minBoundBy` and `maxBoundBy` as just `minBound` and | |
-- `maxBound`. | |
class Bounded b => BoundedBy a b where | |
minBoundBy :: a -> b |
{-# LANGUAGE OverloadedStrings #-} | |
module Css.Default where | |
import Clay | |
import Prelude () | |
defaultStyleSheet :: Css | |
defaultStyleSheet = do | |
body ? do |
function :: x -> x | |
function x = x | |
intFunction :: Integer -> Integer | |
intFunction x = x | |
numFunction :: Num x => x -> x | |
numFunction x = x | |
addNumFunction :: Num x => x -> x -> x |
You can get some interesting information with the use of MultiSets in haskell
This example is finding combinations of sequences with a given hand in mahjong. A more indepth explanation can be found here
runFilter $ MS.fromList
[ Suits Character One, Suits Character One, Suits Character One, Suits Character One
, Suits Character Two
, Suits Character Three