Skip to content

Instantly share code, notes, and snippets.

-- |
-- Create patterns to divide.
--
-- >>> divide 4
-- [[1,1,1,1],[1,1,2],[1,2,1],[1,3],[2,1,1],[2,2],[3,1],[4]]
--
divide :: Int -> [[Int]]
divide 0 = [[]]
divide n = [[x]:y | x <- [1..n], y <- divide (n-x)]
@yuga
yuga / sort_bnf.txt
Created March 12, 2013 02:00
An unserious BNF of the GNU sort command. Redundant separators are placed deliberately.
<key> := <startf> <separator>*
(<dot> <separator>* <startc> <separator>*)?
(<option> <separator>*)*
((<comma> <separator>* <endf> <separator>*)?
(<dot> <separator>* <endc> <seprator>*)?
(<option> <separator>*)*
)?
<startf> := <num>+
<startc> := <num>+
@yuga
yuga / SortKey.hs
Created March 14, 2013 08:38
GNU sort コマンドの -k オプションの引数を Parsecでパースして、テキトウなデータ型 SortKey に格納するコード。 この結果を使用するプログラムをあとで書こうと思うのだけど、フラットなデータ型で持ちまわるのが便利か、それともASTのままでよかったのか、僕には未知数。 たしかに n と r のフラグだけはASTのままと不便だし...
module SortKey where
import Control.Applicative ( (<$>), (<*>), (<*), (*>) )
import Control.Monad ( void )
import Text.Parsec ( ParsecT, Stream, char, digit, eof, many, many1
, option, runParser, space, (<|>) )
import Text.Parsec.String ( Parser )
data SortKeyAST = SortKeyAST StartF EndF
data StartF = SF Int StartC SortOpt
@yuga
yuga / Tables.md
Last active December 15, 2015 15:09

軽い気持ちで tables を使ってみました

準備

{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilies #-}
@yuga
yuga / PostgreSQL.hs
Created May 13, 2013 05:00
haskell-hdbc-tool #1: とりあえず簡単なクエリを動かすことができた。 (Github 2013-05-11時点のhaskell-hdbc-toolを使用)
{-# LANGUAGE ScopedTypeVariables #-}
module Database.Test.PostgreSQL
(
connect
, defineTable
) where
import Language.Haskell.TH (Dec, Q)
import Language.Haskell.TH.Name.CamelCase (ConName)
@yuga
yuga / Query.hs
Last active December 17, 2015 07:39
haskell-hdbc-tool #2: ghc-modがplaceholderの型を決められなかったのでpのままだけど、この例の場合は (Date.Time.Day, Date.Time.Day)。 (Github 2013-05-11時点のhaskell-hdbc-toolを使用)
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MonadComprehensions #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Database.Test.Query where
import Data.Int (Int32)
import Data.Time (Day, UTCTime(utctDay), getCurrentTime)
import Database.HDBC.Record.Query (runQuery)
import Database.HDBC.Session (withConnectionIO)
@yuga
yuga / gist:5598199
Last active December 17, 2015 10:58
haskell-relational-record #1 2013-05-17時点のものを使用。Exprが推論されるようになったので expr や toExpr を書かなくてすむ。
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MonadComprehensions #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Database.Test.Query where
import Data.Int (Int32)
import Data.Time (Day)
import Database.HDBC.Record.Query (runQuery)
import Database.HDBC.Session (withConnectionIO)
@yuga
yuga / gist:5642957
Last active December 17, 2015 16:59
Data type mapping. Maybe like this...

SQL Server types

SQL Server data type    => ODBC data type                 => Haskell data type
                                                             (default of HDBC-odbc)

[o] image               -- SQL_LONGVARBINARY              -- ByteString
[o] text                -- SQL_LONGVARCHAR                -- ByteString
[ ] uniqueidentifier    -- SQL_GUID
[o] date -- SQL_TYPE_DATE -- Day
@yuga
yuga / Main.hs
Last active December 18, 2015 07:19
a result of trial and error in using haskell-relational-record
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MonadComprehensions #-}
module Main where
import qualified Language.SQL.Keyword.ConcatString as SQLs
import qualified Wifi
import Data.Int (Int32, Int64)
import Database.HDBC (IConnection, SqlValue)
@yuga
yuga / Microsoft SQL Server 環境の構築.md
Last active October 5, 2016 09:35
WindowsにSQL Server 2012 Expressをインストールして、Linux上のHaskellからODBCで接続できるようになるまで。

Microsoft SQL Server 環境の構築

  • Server: Widnwos & SQL Server
  • Client: Linux

Microsoft SQL Server 2012 Express のインストール方法