mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	What is Frege? ------------- Frege is a non-strict, pure functional programming language in the spirit of Haskell for the JVM. It enjoys a strong static type system with type inference. Higher rank types are supported, though type annotations are required for that. Frege programs are compiled to Java and run in a JVM. Existing Java Classes and Methods can be used seamlessly from Frege. The Frege programming language is named after and in honor of Gottlob Frege. Project State: ------------- The compiler, an Eclipse plugin and a provisional version of the documentation can be downloaded from here https://github.com/Frege/frege/releases. The REPL can be downloaded from here https://github.com/Frege/frege-repl/releases. An online REPL is running here http://try.frege-lang.org/. Examples: -------- 1) Command Line Clock: https://github.com/Frege/frege/blob/master/examples/CommandLineClock.fr 2) Brainfuck: https://github.com/Frege/frege/blob/master/examples/Brainfuck.fr 3) Concurrency: https://github.com/Frege/frege/blob/master/examples/Concurrent.fr 4) Sudoku: https://github.com/Frege/frege/blob/master/examples/Sudoku.fr 5) Java Swing examples: https://github.com/Frege/frege/blob/master/examples/SwingExamples.fr
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
package examples.SwingExamples where
 | 
						|
 | 
						|
import Java.Awt  (ActionListener)
 | 
						|
import Java.Swing
 | 
						|
 | 
						|
 | 
						|
main _ = do
 | 
						|
    rs <- mapM Runnable.new [helloWorldGUI, buttonDemoGUI, celsiusConverterGUI]
 | 
						|
    mapM_ invokeLater rs
 | 
						|
    println "Hit enter to end ...."
 | 
						|
    s <- getLine
 | 
						|
    return ()
 | 
						|
 | 
						|
celsiusConverterGUI = do
 | 
						|
    tempTextField   <- JTextField.new()
 | 
						|
    celsiusLabel    <- JLabel.new ()
 | 
						|
    convertButton   <- JButton.new ()
 | 
						|
    fahrenheitLabel <- JLabel.new () 
 | 
						|
    frame           <- JFrame.new ()
 | 
						|
    frame.setDefaultCloseOperation JFrame.dispose_on_close
 | 
						|
    frame.setTitle "Celsius Converter"
 | 
						|
    celsiusLabel.setText  "Celsius"
 | 
						|
    convertButton.setText "Convert"
 | 
						|
    let convertButtonActionPerformed _ = do
 | 
						|
            celsius <- tempTextField.getText
 | 
						|
            case celsius.double of
 | 
						|
                Left _  -> fahrenheitLabel.setText ("not a valid number: " ++ celsius)
 | 
						|
                Right c -> fahrenheitLabel.setText (show (c*1.8 + 32.0).long ++ " Fahrenheit") 
 | 
						|
            return ()
 | 
						|
    ActionListener.new convertButtonActionPerformed >>= convertButton.addActionListener
 | 
						|
    fahrenheitLabel.setText "Fahrenheit"
 | 
						|
    contentPane <- frame.getContentPane
 | 
						|
    layout      <- GroupLayout.new contentPane
 | 
						|
    contentPane.setLayout layout
 | 
						|
    -- TODO continue
 | 
						|
    -- http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/uiswing/examples/learn/CelsiusConverterProject/src/learn/CelsiusConverterGUI.java
 | 
						|
    frame.pack
 | 
						|
    frame.setVisible true
 | 
						|
 | 
						|
helloWorldGUI = do
 | 
						|
    frame <- JFrame.new "Hello World Frege"
 | 
						|
    frame.setDefaultCloseOperation(JFrame.dispose_on_close)
 | 
						|
    label <- JLabel.new "Hello World!"
 | 
						|
    cp <- frame.getContentPane
 | 
						|
    cp.add label
 | 
						|
    frame.pack
 | 
						|
    frame.setVisible true
 | 
						|
 | 
						|
buttonDemoGUI = do
 | 
						|
    frame <- JFrame.new "Button Demo"
 | 
						|
    frame.setDefaultCloseOperation(JFrame.dispose_on_close)
 | 
						|
    newContentPane <- JPanel.new ()
 | 
						|
    b1::JButton <- JButton.new "Disable middle button"
 | 
						|
    b1.setVerticalTextPosition   SwingConstants.center
 | 
						|
    b1.setHorizontalTextPosition SwingConstants.leading
 | 
						|
    b2::JButton <- JButton.new "Middle button"
 | 
						|
    b2.setVerticalTextPosition   SwingConstants.center
 | 
						|
    b2.setHorizontalTextPosition SwingConstants.leading
 | 
						|
    b3::JButton <- JButton.new "Enable middle button"
 | 
						|
    b3.setVerticalTextPosition   SwingConstants.center
 | 
						|
    b3.setHorizontalTextPosition SwingConstants.leading
 | 
						|
    b3.setEnabled false
 | 
						|
    let action1 _ = do
 | 
						|
            b2.setEnabled false
 | 
						|
            b1.setEnabled false
 | 
						|
            b3.setEnabled true
 | 
						|
        action3 _ = do
 | 
						|
            b2.setEnabled true
 | 
						|
            b1.setEnabled true
 | 
						|
            b3.setEnabled false
 | 
						|
    ActionListener.new action1  >>= b1.addActionListener
 | 
						|
    ActionListener.new action3  >>= b3.addActionListener 
 | 
						|
    newContentPane.add b1
 | 
						|
    newContentPane.add b2
 | 
						|
    newContentPane.add b3
 | 
						|
    newContentPane.setOpaque true
 | 
						|
    frame.setContentPane newContentPane
 | 
						|
    frame.pack
 | 
						|
    frame.setVisible true
 |