Skip to content

Instantly share code, notes, and snippets.

@kagamilove0707
kagamilove0707 / Sort.hs
Created May 18, 2013 00:39
ちょまどさんに触発されてHaskellでいくつかのソートアルゴリズムを書いてみました。
module Sort (
bubbleSort,
mergeSort,
quickSort) where
import Data.List (splitAt)
bubbleSort, mergeSort, quickSort :: Ord a => [a] -> [a]
bubbleSort xs = foldr ((.) bubbleSort' . flip const) xs [0..length xs]
@kagamilove0707
kagamilove0707 / openurl.c
Created May 22, 2013 08:11
クロスプラットホームでURLからブラウザを起動する関数ですー>ω< ただしOS Xでは動作確認していません、どなたか確認できたら連絡よろしくですー(-ω-)/
#include "openurl.h"
#ifdef _WIN32
#include <windows.h>
#else
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#endif
@kagamilove0707
kagamilove0707 / StrongList.hs
Last active December 17, 2015 16:59
Phantom Type(幽霊型)を使った型安全なリストですー>ω< まだ勉強中なので間違っているところがあるかもしれませんが、そういうときは斜め四十五度からのツッコミを決めてもらえると嬉しいですっ>ω<
-- 存在量子化されたデータ構築子が使えるみたいです>ω<←よく分かってないヾ(゚Д゚ )ォィォィ
{-# LANGUAGE ExistentialQuantification #-}
module Main where
import Prelude hiding (head)
data Empty
data NoEmpty
data StrongList a x = forall y. Cons a (StrongList a y)
|Nil
@kagamilove0707
kagamilove0707 / SafeList_by_GADT.hs
Created May 24, 2013 12:33
Phantom Type、GADTsで書いてみた型安全なリストです>ω<
-- Generalized Algebraic Data Types(一般的代数データ型)が使えるようになるみたいです>ω<
{-# LANGUAGE GADTs #-}
module Main where
import Prelude hiding (head)
-- Phantom Typeではラッパー関数が必要でしたけれど、
-- GADTではデータ構築子の返す型を別々にできるみたいですー>ω<
-- シンプルで堅牢で、とても素敵ですっ>ω<
data Empty
data NonEmpty
@kagamilove0707
kagamilove0707 / GSort.hs
Created May 28, 2013 11:59
MonadPlusとFoldableによって一般化されたソートです>ω< リスト以外にもSeqなどのデータ型に適用できます>ω<
module GSort (bubbleSort) where
import Prelude hiding (head, tail, foldr, foldr1)
import Control.Monad
import Data.Foldable
bubbleSort' :: (Ord a, MonadPlus m, Foldable m, Eq (m a)) => m a -> m a
bubbleSort' xs
|xs == mzero = xs
|xs' == mzero = return x
@kagamilove0707
kagamilove0707 / fuzzbuzz.clj
Last active December 17, 2015 22:48
Clojureで書いたFizzBuzzですー>ω<
(defn fizzbuzz [n] (let [fizz (zero? (mod n 3))
buzz (zero? (mod n 5))] (cond
(and fizz buzz) 'FizzBuzz
fizz 'Fizz
buzz 'Buzz
:else (str n))))
(println (clojure.string/join "\n" (map fizzbuzz (range 1 101))))
@kagamilove0707
kagamilove0707 / fibonacci.clj
Created May 31, 2013 13:03
Clojureで書いたフィボナッチ数列ですー>ω<
(defn fib [x y] (cons x (lazy-seq (fib y (+ x y)))))
(print (take 20 (fib 1 1)))
@kagamilove0707
kagamilove0707 / Callback.java
Created June 1, 2013 05:14
Javaで幽霊型しようとした記録ですー>ω<
package com.github.kagamilove0707.safelist;
public interface Callback<A> {
public void call(A val);
}
@kagamilove0707
kagamilove0707 / ShiritoriTH.hs
Created June 8, 2013 07:05
[はじめての圏論 その第1歩:しりとりの圏 - 檜山正幸のキマイラ飼育記](http://d.hatena.ne.jp/m-hiyama/20060821/1156120185)のしりとりの圏をHaskellで実装した例です>ω<
{-# LANGUAGE TemplateHaskell, QuasiQuotes #-}
module ShiritoriTH where
import Data.Char
import Language.Haskell.TH
import Language.Haskell.TH.Quote
letterDec :: (Char, Char) -> Q [Dec]
letterDec (from, to) = (mapM (\c -> let
n = mkName $ "Letter" ++ return c
in return $ [DataD [] n [] [NormalC n []] [],
@kagamilove0707
kagamilove0707 / Pair.hs
Created June 9, 2013 05:44
Pairモナドですー>ω< どう役立てるかはあなた次第(`・ω・´)
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Data.Pair (Pair, pair, (<:>)) where
import Data.Monoid
import Control.Applicative
newtype Pair a = Pair (a, a) deriving (Show, Eq, Monoid)
infixl 5 <:>
pair, (<:>) :: a -> a -> Pair a